본문 바로가기
개발/Unity 내일배움캠프 TIL

C# 중첩 클래스와 partial 클래스

by 석시 2023. 8. 31.



팀과제를 하다가 느낀 것이 있었다.

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