유니티와 C# 기초: 게임 개발을 위한 한정자 간단 정리 Unity and C# Essentials: Simplifying Modifiers for Game Development
C#에서 사용되는 다양한 한정자(modifiers)는 클래스, 메서드, 프로퍼티, 변수 등의 선언에 추가하여 해당 요소의 행동, 접근성, 범위 등을 정의합니다.
접근 제한자(Access Modifiers)
public: 어디서든 접근 가능.
private: 선언된 클래스나 구조체 내부에서만 접근가능.
protected: 선언된 클래스 내부 및 파생된 클래스에서 접근 가능.
internal: 같은 어셈블리 내에서만 접근 가능.
protected internal: 같은 어셈블리 내, 혹은 파생 클래스에서 접근 가능.
private protected: 같은 어셈블리 내의 파생 클래스에서만 접근 가능.
멤버 한정자(Member Modifiers)
static: 클래스 레벨에서만 접근 가능한 멤버 선언.
const: 컴파일 시간에 평가되는 상수 값.
readonly: 선언 시 또는 생성자 내에서만 값을 할당할 수 있는 필드.
volatile: 멀티 스레드 환경에서 컴파일러 최적화를 방지하는 필드.
메서드 한정자(Method Modifiers)
abstract: 구현이 없으며 파생 클래스에서 구현해야 하는 멤버 선언.
virtual: 파생 클래스에서 재정의할 수 있는 메서드.
override: 상위 클래스의 virtual 또는 abstract 멤버를 재정의.
sealed: 파생 클래스에서 더 이상 재정의할 수 없게 하는 메서드.
클래스와 구조체 한정자(Class and Struct Modifiers)
abstract: 인스턴스화할 수 없으며 상속을 위한 클래스 선언.
sealed: 상속을 금지하는 클래스.
static: 인스턴스화할 수 없으며 static 멤버만 포함하는 클래스 또는 구조체.
기타 한정자(Other Modifiers)
extern: 메서드의 구현이 현재 어셈블리 외부에 있음을 나타냄.
unsafe: 안전하지 않은 코드(주로 포인터)를 사용할 수 있게 함.
in, out: 제네릭 타입 매개변수의 공변성과 반공변성을 나타냄.
이벤트 한정자(Event Modifiers)
event: 이벤트를 선언할 때 사용하는 한정자. 이벤트 핸들러의 추가(add)와 제거(remove)를 관리하는데 사용됩니다.
해당 멤버가 이벤트로 사용될 것임을 나타내며, 이를 통해 해당 타입의 객체들이 이벤트를 구독하고 구독 취소할 수 있게 됩니다. 'event' 키워드를 사용하면 C#컴파일러는 이벤트를 구독하고 구독 취소하는 데 사용할 수 있는 add와 remove라는 두 개의 접근자 메서드를 자동으로 생성합니다. 이벤트는 대리자(delegate)를 기반으로 하며, 일반적으로 사용자 인터페이스의 상호작용, 다른 종류의 알림 시스템에서 널리 사용됩니다.
이벤트는 다양한 대리자(delegate) 타입과 함께 사용될 수 있습니다. 이벤트는 기본적으로 특정 작업을 수행하는 메서드에 대한 참조를 보관하는 대리자를 기반으로 작동합니다. 이벤트 선언에 사용할 수 있는 대리자 유형은 다음과 같습니다.
액션 대리자(Action Delegates)
함수 대리자(Func Delegates)
사용자 정의 대리자(Custom Delegates)
이벤트 핸들러(Event Handler)
이벤트를 선언할 때는 이벤트의 목적과 필요에 따라 적절한 대리자 타입을 선택해야 합니다. 대부분의 경우, 이벤트는 액션 또는 이벤트 핸들러 대리자와 함께 사용되어 이벤트 발생 시 실행될 메서드의 시그니처를 정의합니다. 사용자 정의 대리자는 특정 시그니처가 필요할 때 유용하게 사용될 수 있습니다.
각 한정자는 특정 컨텍스트에서만 사용될 수 있으며, 코드의 의도를 명확히 하고, 접근성을 관리하며, 특정 행동을 강제하는 데 중요한 역할을 합니다.
'Unity' 카테고리의 다른 글
유니티 애니메이터 레이어 추가에 관하여(About adding Unity Animator layers) (1) | 2024.03.05 |
---|---|
SkeletonUtilityBone의 Mode설정 Override와 Follow의 차이 (1) | 2024.02.28 |
유니티 C# 열거형 네이밍 관례 Unity C# Enum Naming Conventions (0) | 2024.02.26 |
Unity C# 클래스 정의에서 콜론(:) 이해하기 (1) | 2024.02.26 |
UnityEvent, UnityAction, Action(.NET)에 관하여 (0) | 2024.02.22 |