Unity 개발일지

[C#] 정적(Static) 필드와 메서드 본문

C#

[C#] 정적(Static) 필드와 메서드

아머르 2024. 4. 26. 21:27

Visual Studio를 켜보면 나오는 창을 모두 아시나요?

단순히 Hello, World!를 출력해주는 요 코드!

오늘은 여기서 static이 무엇을 의미하는지 알아봅시다.

 

 

우선 Static이란?

'정적인', '고정적인' 이라는 사전적 의미를 가진다. 움직이지 않는다는 뜻이며

C#에서는 메서드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자이다.

 

정적(static)속성 및 필드는 클래스명.필드명 과 같이 사용한다. Non static 필드들은 클래스 인스턴스를 생성할 때마다 메모리에 매번 새로 생성하게 되는 반면, static 필드는 프로그램 실행 후 해당 클래스가 처음으로 사용될 때 한번 초기화되어 계속 동일한 메모리를 사용하며 프로그램 종료 시 해제된다.

 

 

정적 필드를 사용하는 이유?

static으로 수식한 필드는 프로그램 전체에서 하나만 존재한다.

프로그램 전체에 걸쳐 공유해야 하는 변수가 있다면, 정적 필드를 이용하면 된다 (ex. 최고기록)

 

사용예시

먼저 GameManager 클래스와 생성자를 만들어준 후 StartGame() 메서드를 만들었다.

 

그리고 ConsoleUtility 클래스를 만든 후 static으로 PrintGameHeader() 메서드를 만들어주었다.

콘솔창 아트를 만들어보고싶다면 아래 사이트 참조!

 

👍 Copy and paste Emoji, Japanese emoticons, Fancy text| TextKool

👍😀😘😍😆😜😅😂Copy and paste Emoji, Japanese emoticons ( ̄・ω・ ̄) ヾ(゚ェ゚ゞ) ╰( ͡° ͜ʖ ͡° )つ──☆*:・゚ ╰( ͡° ͜ʖ ͡° )つ──☆*:・゚ ( ͡ຈ ͜ʖ ͡ຈ) (つ ͡° ͜ʖ ͡°)つ ( ͡ʘ╭͜ʖ╮͡ʘ

textkool.com

 

 

GameManager를 호출하기 위해서는 gameManager를 변수로 new GameManager를 만들어주었지만,

PrintGameHeader를 호출한 방식을 보면 클래스명.메서드명  형식으로 호출하였다.

이 메서드는 앞에 static이라는 키워드를 적어주며, 메서드 내부에서 클래스의 인스턴스 객체 맴버를 참조해서는 안된다. 이 static 메서드는 인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용된다.

 

 

인스턴스 메서드와 정적 메서드를 각각 언제 써야할까?

객체 내부의 데이터를 이용해야 하는 경우는 인스턴스 메서드를 사용

내부 데이터를 이용할 일이 없는 경우 별도의 인스턴스 생성 없이 호출할 수 있도록 정적 메서드 사용

반응형