안녕하세요. 박민성입니다. ☺️
오늘은 C#의 partial에 대해서 글을 쓰고자 합니다. 🤔
1. partial이란?
partial은 하나의 클래스 정의를 여러 파일이나 여러 선언으로 나눠서 작성할 수 있게 해주는 키워드입니다.
public partial class Player
{
private int health = 100;
}
public partial class Player
{
public void TakeDamage(int damage)
{
health -= damage;
}
}
파일은 두 개지만 컴파일할 때는 하나의 Player 클래스로 합쳐지게 됩니다.
가장 단순한 사용하는 이유는 클래스를 여러 파일로 나눠서 관리하기 위해서 입니다.
하지만 중요한 것은 파일만 나눠진 것이지 클래스가 여러 개가 된 것은 아닙니다.
2. 다른 partial 파일의 멤버도 사용할 수 있습니다.
public partial class Player
{
private int health = 100;
}
public partial class Player
{
public void TakeDamage(int damage)
{
health -= damage;
}
}
둘이 같은 클래스이기 때문에 한쪽에 있는 private 멤버도 다른 partial 파일에서 사용할 수 있습니다.
health가 private인데도 사용할 수 있는 이유는 두 파일이 결국 같은 클래스이기 때문입니다.
3. 이미 만들어진 partial 클래스에 기능 추가하기
Unity 관련 도구나 어떤 외부 시스템이 클래스를 자동으로 만들어줬다고 했을때
public partial class PlayerData // 자동 생성된 코드 뿌슝빠슝
{
public int level;
}
이 파일은 자동 생성되는 파일이라 직접 수정하고 싶지 않을 수 있습니다. ("약간 건들이면 오류가 날 것 같은데..?")
public partial class PlayerData
{
public void LevelUp()
{
level++;
}
}
그러면 다른 파일을 하나 만들어서 기능을 추가할 수 있습니다.
public class PlayerData
{
public int level;
public void LevelUp()
{
level++;
}
}
컴파일하면 결국 같은 하나의 클래스가 되기 때문입니다.
이미 존재하는 partial 클래스의 원본 파일을 수정하지 않고 별도의 파일에서 같은 클래스에 기능을 추가할 수 있다는 것이 partial에 진가이기도 합니다.
4. 아무 기존 클래스에나 붙일 수 있는 건 아닙니다.
예를 들어서 Unity의 GameObject 클래스가 이미 존재한다고 해서
public partial class GameObject
{
public void MyFunction()
{
}
}
이런식으로 기능을 추가할 수는 없습니다.
partial로 이어 붙이려면 원래 클래스도 partial로 선언되어 있어야 합니다. 🌟
5. partial method
partial은 클래스에만 쓰는 게 아닙니다.
public partial class Player
{
partial void OnDamaged(int damage);
}
메서드도 선언과 구현을 나눌 수 있습니더.
그리고 다른 partial 부분에서
public partial class Player
{
partial void OnDamaged(int damage)
{
Debug.Log(damage);
}
}
이렇게 구현할 수 있습니다.
이 방식도 자동 생성 코드와 직접 작성한 코드를 연결할 때 의미가 있습니다.
partial과 상속이 얼핏 비슷해 보이지만 partial은 같은 클래스인거에 비해 상속은 다른 서로 다른 클래스이기 때문에 엄연히 다른 주제입니다.
6. 최근 C#에서 partial
최근에는 partial이 클래스와 메서드뿐만 아니라 기능이 더 추가됐습니다!!
public partial class Player
{
public partial int Health { get; set; }
}
C# 13에서는 partial property도 사용할 수 있습니다!!

다른 부분에서 실제 구현을 제공할 수 있습니다.
그래서 최근 partial은 큰 클래스 파일 나눈다 보다는 기존에 있던 코드에 직접 작성한 코드를 추가 시키는 느낌에 문법입니다.
오늘은 C#에 partial에 대해서 알아보았습니다.
예전에 수업에서 BT수업이었나...? 아무튼 partial를 사용했던 걸로 기억이 나서
partial에 대해서 쓰게 되었습니다. 많이 까지는 아니더라도 무조건 사용할 때가 있는 문법이라고 생각이 듭니다.
오늘의 노래 추천은
김승민 - 잘 지내길 바래 이라는 노래입니다.
너를 사랑한단 말은 아직 후회가 되질 않아서
너도 잘 지내기를 바래
내일은 더욱 좋은 글을 써보도록 노력해보겠습니다.
봐주셔서 감사합니다. ☺️