클래스를 상속하는 이유는 같은 코드의 작성을 피해서 재사용성을 높이는 이유로 쓰인다.
그러나 상속 관계의 클래스 구조를 잡다보면 너무 복잡해질수도 있고 상속을 하므로써 상위 클래스를 직접 참조가 가능해지고 보안이나 여러가지 이유로 클래스 상속을 막아야하는 경우가 있다.
이럴때 쓰이는 것이 sealed 키워드 이다.
sealed 키워드
sealed를 클래스에 사용하는 예시
클래스 앞에 sealed 키워드를 붙이면 그 클래스는 더이상 상속받을수 없게 된다.
sealed를 메서드에 사용하는 예시
위의 예시를 보면 Example 클래스를 상속받은 SubExample 클래스에서 부모의 Print 메서드를 생성하고,
sealed 키워드를 넣었을 때, SubExample 클래스를 상속받은 SubExample 클래스에서는 Print 메서드를
재정의 할 수 없게 된다.
요약하자면, sealed를 메서드에 사용하면 클래스 자체의 상속은 가능하나, 메서드의 재정의가 불가능해지게 된다.
partial 키워드
partial이란,
클래스를 여러개로 분할할수 있게 해주는 키워드
한 클래스를 분할하여 같이 작업할 수 있으므로 협업에 매우 유리하다.
사용 예시
partial class PartialExample : MonoBehaviour
{
int a = 10;
private void Start()
{
Debug.Log($"{a}, {b}");
}
}
partial class PartialExample : MonoBehaviour
{
int b = 5;
}
이런식으로 같은 이름의 클래스를 partial을 이용하여 여러개로 나누면 클래스가 두개로 나눠졌을 뿐 모든 데이터를 공유 하고 있다.
즉, 분할된 파일이 하나로 작동하는 것이다.
결과값은 예상대로 두 partial 클래스에 있던 변수 a, b가 출력이 된다.
활용 예시
partial class Agent
{
private float _speed;
private int _hp;
}
필드를 관리하는 클래스
partial class Agent
{
public float Speed => _speed;
public int Hp => _hp;
}
프로퍼티를 관리하는 클래스
partial class Agent
{
public void SetSpeed(float speed)
{
_speed = speed;
}
public void SetHp(int hp)
{
_hp = hp;
}
}
메서드를 관리하는 클래스
partial class Agent
{
private float _speed;
private int _hp;
public float Speed => _speed;
public int Hp => _hp;
public void SetSpeed(float speed)
{
_speed = speed;
}
public void SetHp(int hp)
{
_hp = hp;
}
}
분할 작업(협업)이 다 끝나면, 하나의 클래스에 모두 합치면 된다.
partial class 주의점
- 분할된 클래스는 모두 partial 키워드를 사용해야 한다. 하나라도 사용하지 않으면 오류가 생긴다.
- 분할된 클래스는 모두 같은 접근 지정자를 가져야 한다.
- 당연하지만, 분할된 클래스에서 각각 서로 같은 이름의 변수를 생성하면 안된다.
느낀점
sealed 키워드는 많이 사용하지는 않을 것 같지만 클래스 간 상속 관계 구조가 완성되었을 때, 잘못 상속하는 실수 방지
또는 보안용으로 사용하면 좋을 것 같다.
partial 클래스는 모르고 있었고 협업할 때 불편한 점이 분명히 있었는데, partial 클래스를 알게되고 이걸
앞으로 팀원들과 협업할때 굉장히 유용하게 쓸 수 있겠다는 생각이 들었다.
'C# 기초' 카테고리의 다른 글
[C#][개념] 스레드와 동기/비동기 (0) | 2023.10.31 |
---|---|
[C#] dynamic과 default 키워드 (1) | 2023.10.30 |
[C#] 상속 - 인터페이스(interface) (0) | 2023.10.25 |
[C#] 상속 - abstract(추상), virtual(가상) (0) | 2023.10.25 |
[C#] Static 정적 키워드와 확장 메서드 (1) | 2023.10.25 |