본문 바로가기
IT/C#

[C#]인스턴스

by dya0 2020. 7. 8.

정적 멤버, 인스턴스 멤버

인스턴스란? 어떹 타입을 실체화한 객체 (new 연산자를 거쳐서 메모리에 할당된 객체)

인스턴스(new 연산자를 거쳐서 메모리에 할당된 객체)와 관련된 멤버를 인스턴스 멤버()필드, 메서드, 생성자라고 한다.

class Person{
	public string _name; // 인스턴스 필드
    
    public Person(string name){ // 인스턴스 생성자
    	_name = name;
    }
    public void OutputYourName()// 인스턴스 메서드
    {
    	Console.WriteLine(_name);
    }
}

class Program{
	static void Main(string[] args){
    	Person person = new Person("홍길동"); // new를 통해 인스턴스 생성자에 접근
        person.OutputYourName(); // new로 생성된 객체의 인스턴스 메서드를 호출
        Console.WriteLine(person._name); // new로 생성된 객체의 인스턴스 필드에 접근
    }
}

인스턴스 수준이 아닌 해당 인스턴의 타입 전체에 걸쳐 전역적으로 적요되는 필드 메서드, 생성자 필요

-> 이런 멤버를 인스턴스 멤버와 구분해 정적 멤버라 한다.

 

 

정적 필드 

인스턴스 필드는 new로 할당 받은 객체마다 메모리 확보를 위해 클래스 전역 적으로 값 유지가 안된다.

유지하고 싶으면 클래스 단위의 필드를 정의해야 하고 그게 정적 필드다.

class Person{
	static public int CountOfInstance;// static 예약어로 정적 필드로 만듦
    public string _name;
    public Person(string name){
    	CountOfInstance++;
        _name = name;
    }
}
class Program{
	static void Main(string[] args){
    	Console.WriteLine(Person.CountOfInstance); // 출력 결과 : 0
        Person person1 = new Person("홍길동");
        Person person2 = new Person("홍길순");
        
        Console.WriteLine(Person.CountOfInstance);//출력 결과 : 2 
    }
}

[클래스이름].[정적필드] 형태로 접근 

정적 필드의 값은 new로 할당된 인스턴스와 상관 없이 존재한다.

 

싱글톤(Singleton)

특정 클래스의 인스턴스를 의도적으로 단 한개만 만들고 싶은 경우 클래스 밖에서 해당 클래스의 인스턴스를 만들지 못하게끔 생성자를 private 접근 제한자로 명시하고 단 하나의 인스턴스만 클래스 내부에 미리 생성해 두는 것

class Person{
	static public Person President = new Person("대통령"); // public 정적 필드
    string _name;
    
    private Person(string name) // private 인스턴스 생성자
    {
    	_name = name;
    }
    public void DisplayName()// public 인스턴스 메서드
    {
    	Console.WriteLine(_name);
    }
}

외부에서는 new Person 접근 불가능 하지만 내부에서는

Peron.President.DisplayName(); // 정적 필드로 단일 인스터스 접근
Person p1 = new Person("dya0"); // 에러

 

 

 

참고문헌

정성태, 시작하세요! C# 7.3 프로그래밍 기본 문법부터 실전 예제까지 (위키북스, 2019), 111-125.

'IT > C#' 카테고리의 다른 글

[c# 교육]day4 2  (0) 2020.07.20
[C#] 상속  (0) 2020.07.10
[C#] C# 클래스 확장  (0) 2020.07.09
[C#] 다형성  (0) 2020.07.08
[ASP.NET]Base로 끝나는 클래스  (0) 2020.07.08