팀과제를 하다가 느낀 것이 있었다.
Item
클래스를 만들고,
Item
을 담는 List
를 멤버로 하는 Inventory
클래스를 만들면,
파일이 분리되어 있어 보는 사람이 이해하기 어렵지 않을까? 라는 것이었다.
Inventory
클래스 안에서
Item
클래스를 선언할 수 있나? 하고 찾아보니 되더라.
바로 중첩 클래스라는 건데, 클래스를 다양한 모양으로 만들 수 있게 해주는 것이다.
이 김에 클래스를 만들 때 하나의 클래스를 분할된 파일에 각각 만들 수 있도록 해주는 키워드인 partial
에 대해서도 같이 알아보자.
중첩 클래스 (Nested Class)
public class Container
{
class Nested
{
Nested() { }
}
}
말 그대로, 클래스 내에 클래스를 만드는 것이다.
클래스 뿐만 아니라 인터페이스와 구조체 안에서도 클래스를 선언할 수 있다.
중첩 클래스도 당연히 외부 클래스의 안에 있으니
외부 클래스의 private
멤버에 접근이 가능하다.
public class Container
{
private int _value;
class Nested
{
Nested() { }
public void Function()
{
Container container = new Container();
container._value = 10;
}
}
}
아무래도 중첩 클래스를 사용하는 이유는 보호 수준과 그룹화 때문이다.
특정 클래스 내부에서만 사용되는 클래스가 있다면 그 클래스를 아예 안으로 넣어버려서 다른 클래스에서 접근을 못하는걸 확실하게 해줘버릴 수 있다.
논리적으로 그룹화되기 때문에 코드 파악이 더 쉬운 것은 덤이다.
partial 클래스
partial
이라는 키워드는
하나의 클래스를 여러 파일에 나눠서 작성할수 있도록 하는 키워드이다.
public partial class Employee
{
public void DoWork()
{
}
}
public partial class Employee
{
public void GoToLunch()
{
}
}
실무에서는 클래스 하나의 크기가 너무 커지기도 하고, 한 클래스가 여러 개의 인터페이스를 상속받을 경우 인터페이스 구현부를 나눠서 관리할 필요도 있을것이다.
컴파일 할 때는 partial
로 분할 구현하더라도
하나의 클래스와 완전히 동일하게 동작한다.
가독성을 위한 구문인 셈이다.
여러 곳에 분할 구현 시 주의 사항이 있는데, 한정자를 반드시 통일 시켜줘야 한다.
특히 인터페이스를 상속받아 구현하는 케이스는 인터페이스마다 클래스를 나눠서 작성할 수 있으니 가독성과 유지보수 면에서 아주 좋다.
partial class Earth : Planet, IRotate { }
partial class Earth : IRevolve { }
Uploaded by N2T
'개발 > Unity 내일배움캠프 TIL' 카테고리의 다른 글
Unity MonoBehaviour (모노비헤이비어)와 스크립트 라이프 사이클 (1) | 2023.09.04 |
---|---|
C# 패턴 일치 (Pattern Matching) (0) | 2023.09.01 |
C# Enumerable 인터페이스 (0) | 2023.08.30 |
C# Action으로 종속성 없애기..? (0) | 2023.08.29 |
C# StringBuilder 정리 (0) | 2023.08.28 |