250x250
Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

minjea.dev의 코딩블로그

[c#] 정적 필드, 정적 메서드, 정적 생성자 본문

코딩강좌/c#

[c#] 정적 필드, 정적 메서드, 정적 생성자

minjea.dev 2022. 4. 11. 12:00
728x90

오늘은 정적 필드, 정적 메서드, 정적 생성자에 대하여 알아보겠습니다.

정적 필드

정적 필드를 선언하면 해당 필드는 인스턴스마다 각각 생성되는것이 아니라, 그 클래스 전역에서 접근하거나 사용할수 있습니다. 정적 필드를 선언할때는 앞에 static 키워드를 붙여주면 됩니다. 아래는 Human 클래스에 정적 필드인 instances를 선언한 예제입니다

class Human {
    public string name;
    public int age;
    public string gender;
    static public int instances;
    
    public Human(string name, int age, string gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
   
    
    public void Eat() {
        Console.WriteLine(name+"(이)가 먹습니다");
    }
    
    public void Walk(int meter) {
        Console.WriteLine(name+"(이)가 "+meter+"미터를 걸었습니다.");
    }
}

이렇게 생성된 정적 메서드는 인스턴스를 생성하지 않아도 접근이 가능합니다.

Console.WriteLine(Human.instances);

 

정적 메서드

정적 메서드도, 일반 메서드처럼 선언하되, 앞에 static 키워드를 붙여 정의할수 있습니다. 정적 메서드 또한, 인스턴스를 생성하지 않아도 언제든지 사용이 가능하고. 다음과 같이 사용이 가능합니다.

클래스명.정적메서드명

아래의 코드는 Human 클래스에 instanceNum 메서드를 선언한 예제입니다.

class Human {
    public string name;
    public int age;
    public string gender;
    static public int instances;
    
    public Human(string name, int age, string gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
   
    
    public void Eat() {
        Console.WriteLine(name+"(이)가 먹습니다");
    }
    
    static public instanceNum() {
        Console.WriteLine(this.instances);
    }
    
    public void Walk(int meter) {
        Console.WriteLine(name+"(이)가 "+meter+"미터를 걸었습니다.");
    }
}

하지만, 정적 메서드의 경우에는, 정적 멤버를 제외한 다른 멤버에 접근이 불가능합니다. 그 이유는, 인스턴스가 생성되지 않아도 사용이 가능하기 때문입니다.

다만 정적 메서드 말고 일반 메서드에서는 정적 메서드나 정적 필드에 접근이 가능합니다.

정적 생성자

정적 생성자란 일반 생성자 앞에 static 예약어를 붙여 선언하며, 클래스 하나당 하나만 만들수 있습니다. 또한 정적 생성다는 정적 필드를 초기화 하는 기능을 합니다.

정적 생성자는 클래스에 최초로 접근하는 시점에 단 한번만 실행됩니다. (정적 멤버 호출, 클래스 객체 생성 등)

Human 클래스 내에 다음은 정적 생성자를 선언하는 예제입니다.

class Human {
    public string name;
    public int age;
    public string gender;
    static public int instances;
    
    public Human(string name, int age, string gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    
    static public Human() {
        instances = 0
    }
   
    
    public void Eat() {
        Console.WriteLine(name+"(이)가 먹습니다");
    }
    
    static public instanceNum() {
        Console.WriteLine(this.instances);
    }
    
    public void Walk(int meter) {
        Console.WriteLine(name+"(이)가 "+meter+"미터를 걸었습니다.");
    }
}

 

그렇다면 오늘 강의는 여기까지 하고, 다음 시간에는 접근제한자에 대하여 알아보겠습니다.

728x90

'코딩강좌 > c#' 카테고리의 다른 글

[c#] 네임스페이스 그리고 using  (0) 2022.04.13
[c#] 접근제한자란?  (0) 2022.04.12
[c#] 생성자와 소멸자, 그리고 this  (0) 2022.04.10
[c#] 클래스  (0) 2022.04.09
[c#] 반복문(break, continue, 그리고 goto문)  (1) 2022.04.08