Game Tech Blog

C# - Partial 클래스 본문

IT Study/C#

C# - Partial 클래스

jonghow 2022. 9. 27. 00:51
반응형

간혹, 이런 문제가 있다. 

문제는 아니지만, 한 클래스를 여러 사람이 작업할 경우 어떻게 해야할까?

PlayerManager가 있다고 할때, A가 PlayerManager.cs 를 수정한다. B 도 PlayerManager.cs에 수정해야할 함수가 있다.

서로서로 커밋커밋하면 손쉽게 깃에서 머지되겠지만, 음.. 뭔가 매력적이지 못하다.

 

C 도  D 도 PlayerManager.cs 에 관심이있다면! 이제 치열하게 박터지게 싸울일만 남았다~

 

C#은 잘 나눠쓰라고 Partial Class 라는 것을 지원한다.

 

Partial Class

C# 2.0에 도입된 기능.

클래스의 내용을 다른 파일로 분할하나, 응용 프로그램이 컴파일될 때 합쳐져서 논리적으로는 하나다.

그래서 이 키워드가 붙은건 나눠서 파일로 관리할 수 있다.

 

사용 방법

파일을 두개로 사용하기 위해 Data.cs , Data_Second.cs 파일을 생성하고, Program.cs 파일에서 인스턴스 후 Display 메소드를 이용해 속성을 출력하는 프로그램이다.

// Data.cs
namespace ConsoleApp1
{
    partial class Data
    {
    	// 변수 
        private string _Name; 
        private string _Tag;
		
        // 프로퍼티 설정
        public string Name
        {
            set { _Name = value; }
            get { return _Name; }
        }

        public string Tag
        {
            set { _Tag = value; }
            get { return _Tag; }
        }
		
        // 메소드
        public void Display()
        {
            Console.WriteLine("Name :" + Name + "Tag :" + Tag);
        }
    }
}

// Data_Second.cs
namespace ConsoleApp1
{
    partial class Data
    {	
    	// 변수 추가
        private string _Test;
		
        // 추가한 변수 프로퍼티 세팅
        public string Test
        {
            set { _Test = value; }
            get { return _Test; }
        }
    }
}

// Program.cs
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Data InstanceData = new Data();
            InstanceData.Name = "Tower";
            InstanceData.Tag = "AttackTower";
            InstanceData.Test = "Error";
            
            InstanceData.Display();
        }
    }
}

출력은 다음과 같다.

[이미지0. Partial Class 출력]

여기서 Data.cs 파일 전체를 주석처리할 경우, Data_Second.cs 파일에 클래스가 남아있기 때문에 사용이 가능하다.

 

[이미지1. Partial Class 주석]

주석처리한 쪽의 메소드는 못쓰지만, 필요할 경우 남아있는 파일에 정의해서 쓰면된다.

완벽히 한 클래스라고 생각하면 편하다.

활용 예시

-> 위에 나와있는 상황대로, 같은 클래스를 여러명이서 작업해야 할 경우, 파일을 분리해서 사용하면 꽤나 사용성이 좋을 것 같다. 이전 회사에서는 Partial Class 키워드를 안쓰고 남이썼던 코드랑 내가썼던 코드를 섞어놓아야해서 꽤나 불편했다. 지저분하게 쓰는 경우도 있기 때문이다. 

 

보통 Manager 형태의 필수 클래스들을 컨텐츠 별로 나누고 파일을 네이밍해서 쓰면 꽤나 쓰기 용이하다.

보기도 직관적이고, 남이 수정한 클래스라고 하더라도 어떠한 콘텐츠에만 관련있는 변수구나~ 해서 이해하기도 편하다.

그리고 무엇보다도, 한 클래스에 정신나간듯이 많은 코드를 때려박아서 짬통이 되는경우가 있는데 개발하는 개발자 입장에선 코드를 읽기가 편하다..

결국 컴파일되고 링크되는 컴파일타임 컴퓨터 입장에선 그게 그거겠지만 말이다.

 

참고

https://developer-talk.tistory.com/472

반응형

'IT Study > C#' 카테고리의 다른 글

C# - 리플렉션(Reflection)  (0) 2023.09.26
C# - ref, out, in 한정자  (0) 2023.09.25
C# - Boxing, UnBoxing  (0) 2022.04.08
C# - Enum To String ( 열거형 내용을 문자열로 변환)  (0) 2022.04.05
C# - 프로퍼티  (0) 2022.01.11
Comments