이번 글에서는 partial 클래스에 대해 알아보겠습니다.
partial은 클래스, 구조체, 인터페이스를 두 개 이상의 파일에 분할하여 정의할 수 있게 해줍니다. 각 파일에 정의된 부분들이 합쳐져 사용할 때는 하나의 코드처럼 사용할 수 있게 해줍니다.
보통 대규모의 코드를 관리하기 쉽게 하거나 또는 목적에 맞게 관리하기 위해 사용 되며, Winform을 예시로 보더라도 개발자가 작성하는 Form1.cs와 디자인 부분인 Form1.Designer.cs로 분리 되어 있고 같은 이름의 클래스를 사용하고 있습니다.
partial 클래스
partial 클래스를 만들기 위해서는 아래 규칙을 따라야 합니다.
- partial 한정자는 class 키워드 바로 앞에만 올 수 있습니다.
- 동일한 클래스 명칭을 가져야 합니다.
- 동일한 네임스페이스에 있어야 합니다.
- 동일한 접근 수준을 가져야 합다.(=같은 접근 제한자)
- 각 멤버(필드, 속성, 메소드 등)은 서로 중복되지 않아야 합니다.
- 생성자 또한 중복 정의하면 안됩니다.
예제 코드로 보겠습니다. 프로젝트 생성 후 아래와 같이 코드를 입력해줍니다.
using partial_class;
class Program
{
static void Main(string[] args)
{
CTestMath math = new CTestMath();
int iSum = math.sumXnY(5, 4);
Console.WriteLine(math.LastCalcEn); // 마지막 계산 결과 출력(영어)
Console.WriteLine(math.LastCalcKor); // 마지막 계산 결과 출력(한국어)
}
}
Program.cs에서 CTestMath는 sumXnY 함수만 사용 합니다. 그리고 마지막 계산 결과를 영어, 한국어로 보여주는 LastCalcEn, LastCalcKor 프로퍼티를 출력하구요.
namespace partial_class
{
public partial class CTestMath
{
public CTestMath() { }
private string _last_calc_en= ""; // 마지막 계산 영어로 저장
public string LastCalcEn
{
get { return _last_calc_en; }
}
private void setLastCalcEn(int x, int y)
{
_last_calc_en = string.Format($"{x} plus {y} is {x + y}.");
}
private string _last_calc_kor = ""; // 마지막 계산 한국어로 저장
public string LastCalcKor
{
get { return _last_calc_kor; }
}
private void setLastCalcKor(int x, int y)
{
_last_calc_kor = string.Format($"{x} 더하기 {y} 는 {x+y} 입니다.");
}
}
}
partial_class1.cs에서는 마지막 계산한 내용을 영어, 한국어 문자열로 저장하는 코드가 적혀 있습니다.
setLastCalcEn과 setLastCalcKor 함수는 각각 영어, 한국어로 설정하는 코드를 볼 수 있습니다.
// partial_class2.cs
namespace partial_class
{
public partial class CTestMath
{
public int sumXnY(int x, int y)
{
setLastCalcEn(x, y);
setLastCalcKor(x, y);
return x + y;
}
}
}
partial_class2.cs에서는 sumXnY 함수에 대한 정의가 있습니다. sumXnY 함수 내부에서는 partial_class1.cs에 있는 setLastCalcEn, setLastCalcKor 함수 를 호출 합니다. 파일은 다르지만 partial 클래스이고, 같은 네임스페이스 이름, 같은 클래스 명칭이여서 호출하는데 이상이 없습니다.
위 코드를 실행하면 아래와 같이 출력 됩니다.
github: https://github.com/3001ssw/c_sharp/tree/main/class_study/partial_class