MSDN에 정의 되어 있는 내용 입니다.


It is possible to split the definition of a class or a struct, an interface or a method over two or more source files. Each source file contains a section of the type or method definition, and all parts are combined when the application is compiled.



둘 이상의 소스 파일에 대해 클래스 또는 구조체, 인터페이스 또는 메소드의 정의를 분할 할 수 있습니다. 각 소스 파일에는 형식 또는 메서드 정의의 섹션이 포함되어 있으며 응용 프로그램이 컴파일 될 때 모든 파트가 결합됩니다.


C# 2.0부터 적용되어 있는 것으로 알고 있습니다.

사용하는 이유는 여러가지가 있습니다만 제가 생각하는 이유로는
1. 프로젝트에 여러사람이 접근해서 작업을 할 경우에 소스 merge에 이점을 두거나 해당 부분을 나눠서 작업을 할 수 있는 이점이 있습니다.
 - 예를 들어서 몬스터의 AI 부분 작업을 여러사람이 나눠서 하게 된다면 AI의 해당 부분들( 플레이어 공격, 휴식, 죽음 등등 )을 각각의 파일로 나눠서 작업하게 되면 나중에 접근하기도 쉽고, 나눠서 작업하기도 편합니다. 이후에 예를 설명 드리겠습니다.

2. MSDN에서 설명되어 있기를... Visual Studio에서는 Windows Forms, 웹 서비스 래퍼 코드 등을 만들 때이 방법을 사용합니다. Visual Studio로 만든 파일을 수정하지 않고 이러한 클래스를 사용하는 코드를 만들 수 있습니다.
- 뭐 대충 자동으로 생성되는 코드랑 작업자가 사용하는 코드를 분류해서 사용하면 실수를 미연에 방지할 수 있다는 내용입니다만 전 이런거 사용을 하지 않기 때문에 1번의 이유가 더 확실하죠.

< 간단한 코드를 예를 들어보이겠습니다. >


EnemyAI.cs

public partial class EnemyAI {

    public string Init() {

        return "Enemy AI Init";

    }

}


EnemyAI_Attack.cs

public partial class EnemyAI {

    public string Attack() {

        return "Enemy Attack!!!!";

    }

}


EnemyAI_Death.cs

public partial class EnemyAI {

    public string Death() 

    {

        if( HP > 0 )

            return "No Die";


        return "Enemy Death";

    }

}


Program.cs

public class Program {

    public static void Main() {

        EnemyAI enemy_ai = new EnemyAI();

        Console.WriteLine(enemy_ai.Init());

        Console.WriteLine(enemy_ai.Attack());

        Console.WriteLine(enemy_ai.Death());

    }

}


이런식으로 파일을 나눠서 작업을 하면 좀 더 명확하게 작업을 분류할 수 있고 나중에 특정 작업에 대해서 접근 하기도 쉬워집니다. 다만 너무 많아지면 나중에 오히려 분류하기 힘들어지니 너무 많은 분류는 자제하시는게 좋을 것 같네요.

< 정리 >

partial class는 CLR 수준이 아닌 C# Compiler 수준에서 처리되므로 많은 partial class를 만들어도 실제 컴파일시에 하나의 클래스로 수집하여 인식하므로 단일 코드로 취합합니다.

소스코드 수준에서만 허용됩니다. binary 시엔 허용되지 않습니다.

무분별한 partial class 의 사용은 더욱 복잡해질 소지가 있습니다.

여러 파일에 partial 클래스로 선언시 그 클래스의 멤버들을 보는 것은 복잡하겠지만 클래스뷰를 이용하면 partial을 모아서 한 클래스처럼 보실 수 있습니다.



자세한 사항은 https://msdn.microsoft.com/en-us/library/wa80x488.aspx 참고 하시길 바랍니다.

'프로그래밍 > C#' 카테고리의 다른 글

Command Line Reader 클래스  (0) 2016.11.21
JsonFx 파일 가독성 높게 저장하기  (0) 2016.11.21

+ Recent posts