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() { }
}
□ 정적으로 선언된 함수는 클래스명.변수명 으로 접근할 수 있다.
□ 정적 메서드가 포함된 클래스를 인스턴스화 하면 정적 변수는 포함되지 않는다.
'용어정리' 카테고리의 다른 글
[c#] Action,Func,Delegate 차이점 (0) | 2025.02.28 |
---|---|
[c#] call by value, call by reference (0) | 2025.02.27 |
[용어정리]스택 프레임 (stack frame) (0) | 2025.02.13 |
[용어정리]힙메모리와 스택 메모리 (1) | 2025.02.12 |
[C#] 오버로딩(overloading)과 오버라이딩 (overriding) (1) | 2025.01.27 |