C#

[C#]Partial 클래스(Partial Class)

DevStory 2022. 5. 18.

Partial Class

Partial Class는 C# 2.0에 도입된 기능으로 클래스를 여러 파일에 정의할 수 있습니다. 클래스의 내용을 다른 파일로 분할할 수 있지만 논리적으로는 하나입니다. 응용 프로그램이 컴파일될 때 분할된 파일이 결합되기 때문입니다.

 

클래스를 여러 파일로 분할하려면 partital 키워드를 사용하여 Partial Class로 정의합니다.


Partial Class 예제

다음 예제는 Partial Class를 구현하는 방법을 설명합니다. Person.cs라는 클래스 파일을 프로젝트에 추가하고 아래 소스코드를 Person.cs 클래스 파일에 붙여 넣습니다.

Person.cs 파일 추가

partial class Person
{
  // 필드
  private string _name;
  private int _age;

  // 프로퍼티
  public string Name
  {
    get { return _name; }
    set { _name = value; }
  }

  public int Age
  {
    get { return _age; }
    set { _age = value; }
  }

  // 메서드
  public void DisplayPersonInfo()
  {
    Console.WriteLine("Name: " + _name + " / Age: " + _age);
  }
}

Person 클래스는 partial 키워드로 정의되었으며, 2개의 private 필드, 2개의 public 프로퍼티, 1개의 public 메서드가 존재합니다. Main() 메서드가 존재하는 클래스 파일에서 Person 클래스의 객체를 생성하고 필드에 값을 설정합니다.

class Program
{
  static void Main(string[] args)
  {
    Person person = new Person();

    person.Name = "마이콜";
    person.Age = 20;

    person.DisplayPersonInfo();
  }
}

실행 결과

Name: 마이콜 / Age: 20

 

이제 Person 클래스의 필드, 프로퍼티, 메서드를 파일별로 관리하기 위해 세 개의 파일로 분할합니다. 다음은 필드를 관리하는 PartialPersonField.cs 파일입니다.

partial class Person
{
    // 필드
    private string _name;
    private int _age;
}

다음은 프로퍼티를 관리하는 PartialPersonProperty.cs 파일입니다.

partial class Person
{
  // 프로퍼티
  public string Name
  {
    get { return _name; }
    set { _name = value; }
  }
  
  public int Age
  {
    get { return _age; }
    set { _age = value; }
  }
}

다음은 메서드를 관리하는 PartialPersonMethod.cs 파일입니다.

partial class Person
{
  // 메서드
  public void DisplayPersonInfo()
  {
    Console.WriteLine("Name: " + _name + " / Age: " + _age);
  }
}

파일 분할 작업이 완료되었으므로 Person.cs 파일을 제거합니다.

분할된 파일 구조

프로그램을 실행하면 실행 결과가 동일한 것을 확인할 수 있으며, 분할된 파일이 하나로 동작한다는 것을 알 수 있습니다.


Partial Class 주의사항

분할된 파일은 모두 partial 키워드를 사용해야 합니다. 다음 예제처럼 특정 파일에서 partial 키워드를 작성하지 않으면 컴파일 에러가 발생합니다.

partial class Person
{
}

partial class Person
{
}

// partial 키워드가 없으므로 컴파일 에러가 발생합니다.
class Person
{
}

 

분할된 파일은 모두 동일한 접근 지정자를 가져야 합니다. 다음 예제처럼 접근 지정자가 다른 경우 충돌이 발생합니다.

public partial class Person
{
}

public partial class Person
{
}

// 접근 지정자가 다르므로 컴파일 에러가 발생합니다.
protected class Person
{
}

 

C#은 다중 상속을 지원하지 않습니다. 그러므로 Partial 클래스의 부모 클래스가 다른 경우 컴파일 에러가 발생합니다.

public class A
{
}

public class B
{
}

public partial class Person : A
{
}

public partial class Person : B
{
}

 

Partial 클래스는 다음 예제처럼 Partial 별로 인터페이스를 구현할 수 있습니다.

public interface A
{
  void showA();
}

public interface B
{
  void showB();
}

public partial class Person : A
{
  public void showA()
  {
    // showA() 메서드 구현
  }
}

public partial class Person : B
{
  public void showB()
  {
    // showB() 메서드 구현
  }
}

정리

  • partial 키워드를 사용하여 클래스를 여러 파일로 분할할 수 있습니다.
  • 큰 클래스를 여러 파일로 분할하여 여러 개발자가 동시에 작업할 수 있습니다.
  • Partial 메서드는 C# 9.0 버전부터 사용할 수 있습니다.
반응형

댓글