정적 멤버, 인스턴스 멤버
인스턴스란? 어떹 타입을 실체화한 객체 (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 |