Partial class

-- C# 2011. 7. 8. 12:04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
partial class란 동일한 클래스를 여러 파일에 분리하여 개발가능하도록 구현된 기술입니다.

기존 VS 1.0 에서는 하나의 파일에는 하나 혹은 둘 이상의 클래스를 구현할 수 있습니다. 하지만 두 개의 파일에서 하나의 클래스를 구현할 수가 없었습니다. 2.0에서는 이렇게 두개 이상의 파일에 하나의 클래스를 구현해 줄수가 있습니다.

이렇게 함으로써 얻을 수 있는 이점들은 다음과 같습니다.
소스세이프 사용시 기존 1.0에서 하나의 파일(클래스)을 여러명이 사용하고자 하는 경우, 옵션 설정하여 여러명이 한 파일을 체크아웃해서 수정되고 난 후 Merge 하도록 했습니다.

하지만 이럴 경우 소스가 꼬인다던지 하는 위험요소들이 발생하여 문제점으로 지적되어 왔었습니다. 여러 개의 파일에 하나의 클래스를 둠으로써 그 클래스를 사용하는 많은 개발자들이 독립적으로 작성함으로써 소스세이프 충돌 문제를 해결 할 수가 있습니다. 또한 VS Tool에서 생성하는 Code Generation과 개발자 코드의 분리를 parial class 로 선언하여 처리하였습니다.

닷넷 2.0의 특징으로 웹폼이나 윈폼에서 폼을 추가시 VS에서 생성하는 코드들을 다 분리시켜 놓음으로써 위험요소들을 방지하고 개발자 독립적인 코드를 작성할 수가 있습니다.(InitialComponent() 메소드의 컨트롤 속성들을 함부로 바꾸고 순서를 바꿀경우 위험성이 내포되어 올바른 프로그래밍이 이루어 질 수 없습니다 그 코드들은 개발자의 코드가 아니라 디자이너의 코드이므로 이를 분리한 것입니다. 이렇게 함으로써 코딩상의 위험요소를 많이 제거할 수 있습니다.)

그 외 VS 툴에서 생성하는 코드생성기로서 Typed DataSet , Desinger Code, Web Service Proxy Code 등도 같은 이유로 툴에서 생성하는 코드들입니다.이것들도 역시 툴이 생성한 코드와 개발자 코드를 분리함으로써 위험요소들을 방지했습니다. 간단한 parial class를 사용한 예제를 만들어 보겠습니다. 

A.cs 

public partial class ABC

{

    public string A()

    {

        return "A";

    }

}

 

B.cs

public partial class ABC

{

    public string B()

    {

        return "B";

    }

}

 

C.cs

public partial class ABC

{

    public string C()

    {

        return "C";

    }

}

 

Program.cs

public class Program

{

    public static void Main()

    {

        ABC abc = new ABC();

        Console.WriteLine(abc.A());

        Console.WriteLine(abc.B());

        Console.WriteLine(abc.C());

    }

}


partial class는 CLR 수준이 아닌 C# Compiler 수준에서 처리되므로, 많은 partial class를 만들어도 실제 컴파일시에 하나의 클래스로 수집하여 인식하므로 단일 코드로 취합합니다. 소스코드 수준에서만 허용됩니다. binary 시엔 허용되지 않습니다. partial class를 사용함으로써 소스콘트롤의 관리가 편해집니다. 무분별한 partial class 의 사용은 더욱 복잡해질 소지가 있습니다. 여러 파일에 partial 클래스로 선언시 그 클래스의 멤버들을 보는 것은 복잡하겠지만 클래스뷰를 이용하면 partial을 모아서 한 클래스처럼 보실 수 있습니다.

출처 : http://blog.naver.com/cookatrice?Redirect=Log&logNo=50045096389


PS) 좀 더 자세히 다루고 싶었으나, 귀찮음으로 인해 잘 정리된 블로그를 참조했다.

'-- C#' 카테고리의 다른 글

WCF Restful WebService  (0) 2012.06.21
Checked, Unchecked  (0) 2011.07.11
Sealed Class  (0) 2011.07.08
Using The C# WebClient class to upload and download FTP files  (0) 2011.06.29
C# DLL을 C, C++, MFC에서 쓰는 방법  (0) 2011.06.29
posted by 어린왕자악꿍