static 키워드를 사용하는 객체 처음 사용될 때 한번 할당되고, 프로그램이 끝날 때까지 메모리를 유지한다. 사용할 때 같은 메모리를 참조한다. 즉 정적이다.

반대로 동적인 객체는 사용할 때 마다 메모리를 사용하고, 사용이 끝나면 메모리를 해제한다. 

 

📝 정적 변수

static void Main(string[] args)
{
    Console.WriteLine("Hello, World!");

    // 정적변수
    // 클래스명.변수 < 로 접근
    Cinema.person += 1;

    Cinema cinema = new Cinema();
    
    // 오류 : 인스턴스화 하면 정적 변수가 포함되지 않는다
    // 정적 멤버는 클래스에 속하는 것이지 인스턴스에 속하는 것이 아님
    cinema.person
}

public class Cinema
{
    // 정적 변수
    public static int person = 0;

    public Cinema() { }
}

□ 정적으로 선언된 변수는 클래스명.변수명 으로 접근할 수 있다.

정적 변수가 포함된 클래스를 인스턴스화 하면 정적 변수는 포함되지 않는다.

 

📝 정적 클래스

static void Main(string[] args)
{
    Console.WriteLine("Hello, World!");
    
    // 정적 클래스
    Animal.animalAge += 1;
    Animal.Setting();
}

public static class Animal 
{
    // 오류 : 정적 클래스에 인스턴스 변수를 선언할 수 없다
    public int age = 0;

    // 오류 : 정적 클래스에 인스턴스 메서드를 선언할 수 없다
    public void Func() { }

    // 정적 변수 
    public static int animalAge = 5;
    
    // 정적 메서드
    public static void Setting() { }
}

정적으로 선언한 클래스의 필드와 메서드는 클래스명.변수명/ 클래스명. 함수명으로 접근할 수 있다.

 

🔖 정적선언을 할 때 주의해야할 점

1. 정적 클래스는 인스턴스화 할 수 없다.

2. 정적인 클래스는 정적인 변수와 메서드만 가질 수 있다.

 

📝 정적 메서드 

static void Main(string[] args)
{
    Console.WriteLine("Hello, World!");

    // 정적 메서드
    Food.Eat();
    Food temp = new Food();
    
    // 오류 : 인스턴스화 하면 정적 메서드는 포함되지 않는다
    temp.Eat()
}


public class Food 
{
    static public void Eat() { }
}

 

□ 정적으로 선언된 함수는 클래스명.변수명 으로 접근할 수 있다.

 정적 메서드가 포함된 클래스를 인스턴스화 하면 정적 변수는 포함되지 않는다.

+ Recent posts