NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# 17-9. 파셜 클래스. (Partial Class)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 아주 긴 9일간의 연휴가 지나가고 월요일이 다가오고 있군요. 너무 오래 쉰 탓일까요? 벌써부터 출근하기가 싫어집니다-_-; 뭔가 창의적이거나 창조적인 작업을 할때는 출근하는게 좋았던 때도 있었습니다. 하지만, SI를 하면서부터는 이런 기분을 느끼기가 쉽지 않군요.

     

    오늘은 Partial Class에 대해서 알아보도록 하겠습니다. 중요한 내용이기는 하나 개발자가 직접 사용할일은 거의 없는 기능중에 하나입니다. 이전 글에서 알아본 Nested Class와 쌍벽을 이룰만큼 말이죠^^;

     

    클래스나 구조체, 인터페이스 또는 메서드의 정의를 둘 이상의 소스 파일로 분할하여 관리하고자 할 때 사용됩니다. 소스 파일에는 형식이나 메서드 정의 섹션이 들어 있고 이 모든 부분은 응용 프로그램을 컴파일할 때 하나의 클래스로 결합됩니다. Visual Studio에서 View에 해당하는 Form(WebForm 또는 WinForm등등...)을 만들 때 자동으로 디자인과 비지니스 영역이 분리됩니다. 그리고 이들 클래스에는 partial 키워드가 자동으로 추가됩니다.

     

    아래 예제를 통해 쉽게 이해할 수 있습니다.

    using System;
     
    namespace PartialClass
    {
        partial class MyClass
        {
            public void Method1()
            {
                Console.WriteLine("MyClass.Method1");
            }
     
            public void Method2()
            {
                Console.WriteLine("MyClass.Method2");
            }
        }
     
        partial class MyClass
        {
            public void Method3()
            {
                Console.WriteLine("MyClass.Method3");
            }
     
            public void Method4()
            {
                Console.WriteLine("MyClass.Method4");
            }
        }
     
        class MainApp
        {
            static void Main(string[] args)
            {
                MyClass obj = new MyClass();
                obj.Method1();
                obj.Method2();
                obj.Method3();
                obj.Method4();
            }
        }
    }

     

     

    partial 키워드를 사용하려면 클래스 구조체 또는 인터페이스가 같은 네임스페이스 안에 있어야 합니다. 또한, 접근 한정자(public, private등...)가 동일해야 합니다.

    아래는 이미지는 위 코드를 실행한 결과입니다.

    P130S3j.png

     

     

    네스티드 클래스도 partial을 사용할 수 있습니다. 같은 이름을 가진 partial class는 어느 하나가 추상이거나 봉인 클래스로 지정되면 전체 형식은 추상 또는 봉인 클래스가 됩니다. 기본 클래스를 지정하는 모든 부분이 일치해야 하지만 기본 클래스를 생략하는 부분에서도 기본 형식을 상속합니다. 이는 서로 다른 인터페이스를 지정할 수 있으며 컴파일될 때 모든 인터페이스가 하나로 합쳐지게 됩니다. 이런 동작은 클래스의 특성에도 동일하게 적용됩니다.

    [SerializableAttribute]partial class Moon { }[ObsoleteAttribute]partial class Moon { }

     

     

    위 내용은 아래와 같습니다.

    [SerializableAttribute][ObsoleteAttribute]class Moon { }

     

     

    이렇게 partial 키워드를 사용하여 분리된 클래스들을 부분 형식이라 부릅니다. 이 때 모든 부분 형식들은 동일한 어셈블리와 동일한 모듈(exe 또는 dll)에서 정의해야 합니다. partial을 사용하는 모든 부분 형식은 여러 모듈에 걸쳐 분산될 수 없습니다.

     

    WebForm의 경우 아래와 같이 자동으로 디자이너와 비지니스를 분리해서 생성해줍니다.

    pIieUvf.png

     

     

    윈폼도 동일하게 동작합니다.

    RAcgqSK.png

     

     

    다음 시간에...

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.