앙큼한 개발기록

[C#] partial class 정리 본문

개발/visualBasic

[C#] partial class 정리

angkeum 2023. 1. 10. 23:31

회사에서 다른 사람이 만든 프로젝트를 수정하던 중 

메인 폼의 partial class 를 다른 디자인 cs 파일로 만들어 정의해 놓은 것을 보고 

이걸 이렇게 써도 되나.... 라는 생각이 들어 찾아보니 

딱히 이걸 어떻게 쓰라는 말이 있지는 않아 정리를 좀 해보자 글을 작성한다. 

(사실 그렇게 쓰면 안된다...그리고 파일 네이밍도 안맞고..)

 

공식 사이트 에서는 다음과 같이 정의한다. 

[partial은 클래스구조체인터페이스 또는 메서드의 정의를 둘 이상의 소스 파일에 분할할 수 있다.]

 

이말인 즉 사실 class 말고도 struct, interface, function 도 가능하다는 말이다. 

하지만 우리는 보통 class로 많이 사용하고,

c#에서도 폼을 만들면 partial class로 

하나는 개발자가 수정하도록, 함수나 이벤트를 핸들링 하고 

다른 하나는 리소스를 정의하고 화면에서 조작되는 값을 나타내는 클래스로 

나누어서 작업할 수 있도록 편의성을 제공해 준다. 

 

또한

[각 소스 파일에는 형식 또는 메서드 정의 섹션이 있으며 모든 부분은 애플리케이션이 컴파일될 때 결합됩니다.]

이는 partial 로 정의된 애들은 컴파일 될때 결합하므로 컴파일 되기 전에는 사용이 불가능하다는 소리 이다. 

즉 외부에서 호출해서 사용 못한다. 

 

참조: https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/partial-classes-and-methods

 

Partial 클래스 및 메서드 - C# 프로그래밍 가이드

C#의 Partial 클래스 및 메서드는 클래스, 구조체, 인터페이스 또는 메서드의 정의를 둘 이상의 소스 파일에 분할할 수 있습니다.

learn.microsoft.com

 

partial 은 다음과 같은 경우에 사용된다. 

1. 다수의 개발자가 하나의 class, struct, interface를 작업하는 경우 

2. 프로젝트의 규모가 큰 경우 

3. 사용상의 구분 (디자인, 이벤트, 선언, 기타 등등)

 

partial 사용시 주의사항

1. 선언과 정의의 타입이 일치해야 된다.

- 이름이 당연히 같아야 된다. partial로 해놓고 일반 public으로는 안된다.  

 

2. method의 return type는 void만 가능 

- 아직 컴파일이 되지 않은 상태이기 때문에 void로 통일

 

3. 접근은 오직 partial로만 

- 이것도 마찬가지로 컴파일 

 

 

공식 문서 예시 

public partial class Coords
{
    private int x;
    private int y;

    public Coords(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

public partial class Coords
{
    public void PrintCoords()
    {
        Console.WriteLine("Coords: {0},{1}", x, y);
    }
}

class TestCoords
{
    static void Main()
    {
        Coords myCoords = new Coords(10, 15);
        myCoords.PrintCoords();

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output: Coords: 10,15

 

그리고 partial class 파일을 나누는 경우 

naming은 제발 [이름][기능이나 목적].cs 로 하면 좋겟다. 

ex ) MainForm.cs, MainForm.Socket.cs, MainForm.Message.cs, MainForm.Text.cs 등등...

 

 

ps. Microsoft .net 공식문서 되게 친절하네.

 

'개발 > visualBasic' 카테고리의 다른 글

C# const , readonly 설명  (0) 2018.01.18
C# for foreach 문  (0) 2018.01.16
Comments