Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

행복한 개구리

Unity3D 팀프 21.06.24 Generic Interface 본문

Unity/Project : Cursed Treasure

Unity3D 팀프 21.06.24 Generic Interface

HappyFrog 2021. 6. 24. 15:31

1. IPUN2라는 Photon이 공통적으로 사용하는 메서드를 작성할 부모 인터페이스를 만들고 그 하위의 Title, Lobby, InGame에서 사용할 인터페이스들을 만든다 (I씬이름PUN2)

2. 그리고 해당 인터페이스들을 모두 IPUN2를 상속하게만든다. 

3. 이어서 싱글턴 객체생성부분에서 instance를 IPUN2타입을 반환하게 만든 다음에 GetInstance의 반환형식은 무엇이든 반환할 수 있도록 Generic타입인 T반환타입으로 만들고 T는 결국 IPUN2를 반환한다는 where T : IPUN2 를 이어서 작성한다

4. 그리고 instance가 존재하지 않는다면 해당 싱글턴클래스의 생성자로부터 객체가 생성되겠지만 (사진에서는 TitlePUN2) instance가 반환될때는 결국 Generic타입으로 반환된다 ((T)instance)

 

이렇게 한다면 각 Lobby, Title, InGame에서 하나의 싱글턴으로 각각 PunCallback의 객체를 찾을 수 있게된다. (기존에 내가 했던 switch를 사용하여 하는것보다 발전된 방법)

 

또한 "TitlePUN2.GetInstance<I씬이름PUN2>().메서드"를 사용한다면 내가 원하는 인터페이스의 메서드만을 사용할 수 있게된다.

 

=>성능적인 부분에서는 크게 차이가 없지만 가독성을 상당히 개선해주는 작성방법이다. Interface로 간결하게 메서드들의 정의를 해주고 Generic타입으로 필요없는 인터페이스의 메서드를 생성하지 않게 해준다.

 

* 단, 싱글턴인 TitlePUN2는 IPUN2, ITitlePUN2, ILobbyPUN2, IInGamePUN2를 모두 인터페이스로 받아야한다.

 

이정도면 이득인 교환인듯 ㅎㅎ 구조를 바꿨는데 오류 10개밖에 안났다.

 

where T : IPUN2 가 무슨 의미일까 궁금해서 찾아보았다.

where T : IPUN2 는 기본 형식을 IPUN2로 지정하겠다는 의미라고 한다.

 

쩐다!