Learning
When: 1학년 8월 23일
How:
수업 시간에 선생님이 bool 타입 변수에 => 이런 연산자를 쓰셨는데, 처음 보는 문이어서 좀 더 공부해 보았습니다. (알고 보니 아래의 IsGrounded는 변수가 아니었습니다.)
public bool IsGrounded => MoveCompo.IsGrounded;
Understanding:
- 설명 : 식 본문 멤버는 식 본문 메서드/프로퍼티/생성자 등 다양한 문에서 사용할 수 있는데, 불필요한 부분을 빼 코드 길이를 줄여주는 자동 구현 프로퍼티 같은 존재입니다. 저는 처음 보고 람다식에서 파생된? 람다식과 관련된 기능인 줄 알았는데, 람다식과 같이 => 연산자를 사용한다는 것 이외에는 관련이 없습니다.
사용 : 식 본문 멤버를 사용할 수 있는 것들은 메서드, 프로퍼티, 읽기 전용 프로퍼티, 생성자, 소멸자가 있습니다.
- 메서드, 생성자, 소멸자 : 이 3개의 기능에서는 중괄호, return이 있다면 return도 생략하는 역할을 할 수 있습니다. 언뜻 보면 람다식 같기도 하지만 메서드의 이름이 있고 여러 번 쓸 수 있기 때문에 람다식을 뜻하는 것은 아니며 {return a + b;}를 줄인 것입니다. 생성자와 소자도 똑같이 중괄호 없이 식 본문 멤버를 사용할 수 있습니다.
public int Plus(int a, int b) => a + b;
- 읽기 전용 프로퍼티 : 읽기 전용 프로퍼티와 그냥 프로퍼티를 분류한 데에는 역할의 차이가 있습니다. 처음에 착각했던 변수 IsGrounded가 프로퍼티인데, 원래 자동 구현 프로퍼티는 변수처럼 보이지만 변수라고 생각되는 것은 그냥 하나의 통로일 뿐이고, 진짜 변수는 컴파일러가 자동으로 만들어주는 '백킹 필드'가 값을 가집니다. 식 본문 멤버는 간단하게 백킹 필드 대신 => 뒤에 있는 값을 get 한다고 생각하시면 됩니다. 주의할 점은 get만 있고 set은 없는 읽기 전용 프로퍼티이기 때문에 값을 바꿀 수는 없습니다.
public bool IsGrounded => MoveCompo.IsGrounded;
- 프로퍼티 : 식 본문 멤버는 메서드에서와 같이 프로퍼티의 get에서 {return}을 생략할 수 있게 해줍니다. set에서도 사용할 수 있는데, set에서는 그냥 중괄호({ })만 생략할 수 있습니다.
public int A
{
get => a;
set => a = value;
}
- 이벤트 : 이벤트는 그냥 한 줄로도 구현할 수 있지만, 자세한 로직이 필요하면 직접 event를 구현하기도 하는데, 거기서 쓰이는 add, remove에 프로퍼티에서 처럼 사용할 수 있습니다.
private Action action;
public event Action MyAction
{
add => action += value;
remove => action -= value;
}
- 인덱서 : 프로퍼티의 확장형인 인덱서 답게, get과 set은 프로퍼티와 거의 비슷하기 때문에 당연히 식 본문 멤버를 사용할 수 있습니다.
private int[] a;
public int this[int idx]
{
get => a[idx];
set => a[idx] = value;
}
Result: 식 본문 멤버는 return이 있다면 return을 생략할 수 있고, 중괄호를 생략할 수 있습니다. 하지만 중괄호가 없으니 당연히 2문장 이상은 담을 수 없기 때문에 정말 간단한 로직을 작성할 때만 쓸 수 있습니다.
'C#' 카테고리의 다른 글
| [C#] object 타입 (0) | 2025.08.25 |
|---|---|
| [C#] 튜플 (0) | 2025.08.24 |
| [C#] 인덱서(Indexer) (0) | 2025.08.22 |
| [C#] where 키워드 (Generic 제한) (0) | 2025.08.20 |
| [C#] Notify Value (0) | 2025.08.19 |