인프런 커뮤니티 질문&답변

smeargle235님의 프로필 이미지

작성한 질문수

유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지

SingletonBehaviour 클래스의 where 제약 관련해서 질문 드립니다.

해결된 질문

24.09.06 23:18 작성

·

54

0

안녕하세요.
섹션 2의 SingletonBehaviour 강의 수강 중 궁금한 점이 생겨 질문 남깁니다.
해당 클래스가 MonoBehaviour의 성격을 띄게 하기 위해서 클래스에 MonoBehaviour를 상속시키는 것 까지는 이해가 되었습니다.
그러나 뒤에 다시 SingletonBehaviour<T>에 대한 제약의 필요성이 충분히 이해되지 않아 모호하게 느껴졌습니다. 앞으로 SingletonBehaviour를 상속 받을 클래스에 구현을 강제하는 것인지, 아니면 성능 상의 제가 알지 못하는 이점이 있는 것인지 궁금합니다.
해당 SingletonBehaviour 클래스가 아니더라도, 클래스 설계에 있어 이와 같은 재귀적인 형태의 where 제약이 어떤 의미 또는 의도가 있는 것인지 궁금합니다.

답변 1

1

BurningCarrot님의 프로필 이미지
BurningCarrot
지식공유자

2024. 09. 07. 11:06

안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다.

 

SingletonBehaviour<T> 제약을 추가하는 이유는 제네릭 타입 T가 항상 SingletonBehaviour<T>의 하위 클래스임을 보장하기 위해서 입니다. 이 조건이 없으면 잠재적으로 모든 타입을 T로 전달할 수 있게 되며, 이로 인해 싱글톤 패턴이 깨져버리는 결과를 초래합니다.

where 제약을 사용하는 또 다른 좋은 예로는 ObjectPool 클래스가 있겠습니다. 아래와 같이 Character 로 제네릭 타입 T를 제약함으로써, 오브젝트 풀에 사용할 수 있는 클래스는 Character 클래스의 하위 클래스만 가능하도록 강제할 수 있습니다.

public class ObjectPool<T> where T : Character
{
    //....(중략)
}
 
smeargle235님의 프로필 이미지
smeargle235
질문자

2024. 09. 08. 20:34

답변 감사합니다!
단순히 where 제약 자체 보다는 다시 자기 자신의 타입으로 제약을 거는 상황에 대해 궁금했었는데 제가 질문을 잘 못했던 것 같습니다. 남겨주신 답변에서 이것이 싱글톤 패턴의 특성으로 인한 것으로 이해가 되었습니다.
좋은 강의 만들어주셔서 감사합니다. 많이 배우고 있습니다.