• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

인터페이스 상속조합에대해서 질문드립니다.

23.11.06 03:13 작성 조회수 141

0

인터페이스 설명하신거보고 상속을 이용해서 여러가지 타입을 레고처럼 조립해서 새로운 형태의 타입을 만들어낼수도 있겠구나 라는 생각을 하게됐습니다.

그런데 이게 구조적으로 원래이런건지 몰라서 질문을 드려봅니다.

예를 들어서 Iflyable, Ishoutable, Iattackable 이라는 인터페이스를 구현해서

각각

Iflyable에는 fly라는 함수를 Ishoutable에는 shot이라는 함수를 Iattackable에는 attack이라는 함수를 넣고

flyshouter라는 class가 Iflyable과 Ishoutable을 상속받아서 날면서 소리를 지르는 능력을 얻었다고 가정해볼게요.

그리고 두번째로

ShoutAttacker라는 class가 Ishoutable과 IAttackable을 상속받아서 소리지르면서 공격을 하는 능력을 얻었다고 가정해보겠습니다.

그러면 어찌됐던지 인터페이스가 상속이 돼었기때문에

각각 flyshouter => fly와shout라는 함수를 shoutattacker => shout와 attack이라는 함수를 구현해야하잔아요?

그러면 결국엔 구현에서 shout라는 공통의 함수를 구현하게 될텐데

물론 소리를 지르더라도 뭐 캐릭터에따라서 조금 다르게 소리를 낼수도 있긴하지만 기능자체가 완전 똑같다고 했을때

flyshouter와 shoutattacker는 완전 형태가 똑같은 shout 함수를 각각 하나씩 가지고 있어야하는건가요?

제가 이질문을 하는 이유는 저렇게 능력들을 인터페이스로 부여받았을때 상속받은 클래스마다 구현을 다 따로하는데 구현부가 완전 똑같은경우에는

그냥 복사 붙여넣기로 하나씩 들고 있는게 맞나싶어서 질문 드려봤습니다. 뭐 한두개정도는 복붙해서 사용해도 크게 문제는 없을거같은데

지금은 예시로 각각 함수를 하나씩 물고 있는 형태로만 말씀드렸는데 저게 만약에 많아지면 많아지는만큼 늘어나는만큼 계속 복붙을 하는게 맞는지 궁금해서 질문 올렸습니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.11.08

안녕하세요 술홍 님, 인프런 AI 인턴이에요.

인터페이스를 상속 조합하여 새로운 형태의 타입을 만드는 것은 맞는 접근 방법입니다. 여러 개의 인터페이스를 구현한 클래스를 상속받은 클래스는 각 인터페이스에서 정의한 함수들을 모두 구현해야 합니다.

flyshouter 클래스는 Iflyable과 Ishoutable 인터페이스를 상속받았기 때문에 fly와 shout 함수를 구현해야 합니다. 이 경우, fly와 shout 함수는 개별 인터페이스에서 정의한 기능들을 수행하도록 구현하면 됩니다.

shoutattacker 클래스는 Ishoutable과 IAttackable 인터페이스를 상속받았기 때문에 shout와 attack 함수를 구현해야 합니다. 마찬가지로, shout와 attack 함수는 개별 인터페이스에서 정의한 기능들을 수행하도록 구현하면 됩니다.

만약 여러 클래스에서 shout 함수와 같이 구현부가 완전히 동일한 경우, 중복을 피하기 위해 다른 방법으로 코드를 재사용할 수 있습니다. 예를 들어, shout 함수를 별도의 helper 클래스로 분리하고, 해당 클래스를 인스턴스화해서 shout 함수를 호출하는 방식으로 구현할 수도 있습니다. 이렇게 하면 shout 함수의 구현을 한 곳에서 유지보수하면서 여러 클래스에서 동일한 기능을 사용할 수 있습니다.

많은 함수들이 중복되는 경우에는 이러한 방법을 고려하여 코드를 구현할 수 있습니다. 감사합니다.