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

이원근님의 프로필 이미지
이원근

작성한 질문수

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

객체지향 설계에 대한 질문

작성

·

203

·

수정됨

0

안녕하세요, 9강 델리게이트 까지 들은 현재,

제가 객체지향 설계에 대해 잘 이해를 한 것인지 잘 모르겠고 궁금한 것이 생겨서 질문 남깁니다.

 

9강에서 인터페이스를 사용해서 느슨한 결합으로 구현하는 것을 설명해주셨었습니다.

강의에서 인터페이스를 구현할 때, 인터페이스를 사용해서 함수를 호출하기 위해서는 특정 클래스를 Cast하여 확인하고 호출했었습니다.

그러면 예를 들어 캐릭터에서 아이템 사용 인터페이스를 사용한다고 해도 아이템 클래스 헤더를 include를 해야하는 상황이 발생하는데

이 경우에는 인터페이스를 사용했음에도 결합? 의존이 발생한 것이라고 봐야할까요?

 

그리고 델리게이트 강의에서 중간에서 연결과 활동을 관리하는 주체 클래스가 필요하다고 하셨는데 이 클래스의 경우에는 모든 클래스를 include하여 사용하게 되는데 강한결합을 따지지 않나요?

 

그리고 강의를 따라가며 이해한 걸로 예시를 들어보았는데 제가 제대로 이해하고 있는 것인지 궁금합니다...

좀 길지만 혹시 한번 봐주신다면 정말 감사하겠습니다

===============================================================

<6강 리플렉션 2>

게임에서 다양한 아이템이 있습니다.

아이템이라는 클래스를 만들어서 상속시켜 구현을 합니다.

아이템 클래스에는 Use라는 가상 함수를 두고 이를 오버라이드 해서 각 아이템의 사용 시 효과를 구현합니다.

 

<7강 인터페이스>

사용가능한 아이템이 있고 패시브 효과를 가진 아이템이 있을 수 있기 때문에 Use라는 함수를 UsableItemInterface 등의 인터페이스로 구현하여 상속시켜 구현합니다.

 

<8강 컴포지션>

포함관계를 사용하여 복잡한 기능을 클래스를 쉽게 구현합니다.

캐릭터 클래스에 아이템 클래스를 include하여 생성하여 아이템의 기능을 사용할 수 있게 합니다.

 

<9강 델리게이트>

include 된다면 강한 결합이기 때문에 안좋은 설계 방법이며 인터페이스를 활용하여 구현하여 느슨한 결합을 유지할 수 있습니다.

예를 들어 아이템 자체를 include하기 보다는 아이템 사용 함수를 구현한 인터페이스에 의존하게 하여 해당 인터페이스를 구현한다면 다양한 종류의 아이템을 직접 캐릭터에 include하여 변경할 필요없이 사용이 가능하게 됩니다.

하지만 매번 인터페이스를 만드는 것이 불편할 수 있으므로 델리게이트를 쓰면 편하고 안정적으로 관리가 가능합니다.

캐릭터와 아이템의 의존을 없애기 위해 연결과 활동 주체 클래스를 만듭니다.

주체 클래스에서 캐릭터와 아이템을 include하고 캐릭터에 onUse라는 델리게이트를 만들고 이게 호출되면 아이템의 Use가 호출되도록 bind합니다.

그러면 캐릭터와 아이템이 의존하지 않고도 사용할 수 있게 되었습니다.

===============================================================

답변 1

0

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

강한 결합이라고 #include가 한 번도 안된다는 의미는 아닙니다.
예를 들어 장착이라는 어떤 추상적 행동이 있을 때, 이의 include는 필요합니다.
하지만 장착이라는 행동을 지원하는 아이템이나 무기, 악세사리의 실제 클래스의 선언과 정의에 대한 #include는 필요치 않다는 것이 핵심이겠지요.

이원근님의 프로필 이미지
이원근
질문자

답변 감사합니다.

제가 궁금했던 부분이 바로 이 부분이기도 한데,
인터페이스 강의에서
DoLesson을 정의한 인터페이스를 사용하기 위하여 이의 include를 하였습니다. 하지만 더 나아가서 구현하였는지 확인하는 Cast 과정에서 Person 클래스의 include 또한 필요하였습니다. 결국 Person과의 결합이 발생했다고 생각하는데 이정도의 결합은 괜찮다는 것일까요?

확실한 개념 정립이 쉽지 않아서 다소 질문이 난해합니다... 양해부탁드립니다 ㅠ

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

네 Part1은 딱 간단한 기본 예제만 고안했는데 실제 인터페이스 활용 사례는 Part2강좌에서 다루고 있으니 참고해주세요.

이원근님의 프로필 이미지
이원근

작성한 질문수

질문하기