static 한정자란?
- 클래스의 멤버(필드, 메소드)를 객체 생성 없이 사용 가능(new 없이)
- 클래스 static 필드(변수)
- 클래스 static 메소드(함수)
- static 메소드 내부에 사용하는 변수는 반드시 static
>> C# static 메서드
정적(Static) 메서드는 인스턴스 메서드와는 달리 클래스로부터 객체를 생성하지 않고 직접 [클래스명.메서드명] 형식으로 호출하는 메서드이다. 이 메서드는 메서드 앞에 static 이라는 C# 키워드를 적어 주며, 메서드 내부에서 클래스의 인스턴스 객체 멤버를 참조해서는 안된다. 이 static 메서드는 인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용된다.
public class MyClass
{
private int val = 1;
// 인스턴스 메서드
public int InstRun()
{
return val;
}
// 정적(Static) 메서드
public static int Run()
{
return 1;
}
}
public class Client
{
public void Test()
{
// 인스턴스 메서드 호출
MyClass myClass = new MyClass();
int i = myClass.InstRun();
// 정적 메서드 호출
int j = MyClass.Run();
}
}
>> C# static 속성, 필드
정적(Static) 속성 및 필드는 위의 static 메서드와 같이 [클래스명.속성명]과 같이 사용하며, 다음 예와 같이 static을 앞에 붙여 정의한다. 클래스 내의 Non-static 필드들은 클래스 인스턴트를 생성할 때마다 메모리에 매번 새로 생성되게 되는 반면, static 필드는 프로그램 실행 후 해당 클래스가 처음으로 사용될 때 한번 초기화되어 계속 동일한 메모리를 사용하게 된다.
// static 필드
protected static int _id;
// static 속성
public static string Name { get; set; }
>> C# static 클래스
Static 클래스는 모든 클래스 멤버가 static 멤버로 되어 있으며, 클래스명 앞에 static 이라는 C# 키워드를 사용하여 정의한다. Static 클래스는 public 생성자를 가질 수 없지만 (왜냐 하면 static 클래스는 객체를 생성할 수 없으므로), static 생성자를 가질 수 있다. 이 static 생성자는 주로 static 필드들을 초기화 하는데 사용한다.
// static 클래스 정의
public static class MyUtility
{
private static int ver;
// static 생성자
static MyUtility()
{
ver = 1;
}
public static string Convert(int i)
{
return i.ToString();
}
public static int ConvertBack(string s)
{
return int.Parse(s);
}
}
// static 클래스 사용
static void Main(string[] args)
{
string str = MyUtility.Convert(123);
int i = MyUtility.ConvertBack(str);
}
한줄요약
static은 공유 상태를 유지하기 때문에 인스턴스 멤버에 비해 메모리 사용 측면에서 효율적일 수 있다. 하지만 너무 남용 할 경우 관리가 어렵고 객체 지향적 기법의 유연성을 제한할 수 있다.
참고문서
>>
>> 공식문서
오늘의 회고
알고는 있었지만 직접 글로 쓰고 제출하려니 내가 알고있는 내용이 확실할까 하는 생각이 들었고 더 공부해야겠다는 생각을 했다. 지금까지 내가 알고있는 내용들이 대부분 이럴거라고 생각하면 마음이 아프다. 열심히 공부해야지..
'Record > TIL' 카테고리의 다른 글
[C#] Override와 Overload란? (0) | 2024.07.03 |
---|---|
[C#] 확장 메서드란? (0) | 2024.07.02 |
[Unity] 내가 움직인 방향으로 3D 캐릭터 방향 고정하기 (0) | 2024.06.28 |
[Unity] 스파르타 본사 방문날 (2) | 2024.06.28 |
[Unity] 이누야샤 레퍼런스 카드전략게임 팀프로젝트 마무리 (0) | 2024.06.26 |