버그 해결을 위한 모든 질문을 던져
0 votes
271 views
C++에선 따로 인터페이스라는 것이 존재하지 않아서 멤버 변수를 선언해도 되지만, 보통 인터페이스는 순수 가상 함수만을 선언하잖아요?

근데.. 이 룰을 따르게 되면

공격할 수 있는 객체를 위한 인터페이스를 만들고, 이 인터페이스를 상속받는 객체는 항상 공격력을 가질텐데

굳이 이 인터페이스를 상속받는 클래스마다 공격력이란 멤버 변수를 일일이 정의해주는게 맞는지 궁금하네요.
asked (23 point)
재 태그 , 271 views

3 answers

+1 vote
인터페이스 말고 추상클래스로 구현하시는건 어떨까요?

MSDN 링크 하나 첨부해봅니다.

https://docs.microsoft.com/ko-kr/cpp/cpp/abstract-classes-cpp?view=msvc-160
answered (436 point)

감사합니다. 사실 공통적으로 setter/getter 는 재정의 필요없이 그대로 쓰기 때문에 다중상속을 하게 된다면 인터페이스보단 추상클래스라고 불러야할 것 같네요..

0 votes
C++은 다중상속이 가능하고, 다중 상속 받은 클래스를 생성할때 각각의 부모 클래스들의 생성자가 호출되는 시점을 보장하지 않기 때문에 다이아몬드 상속 등 다양한 문제가 발생합니다.

그래서 자바나 그 이후에 나온 언어들은 주로 단일상속만 가능하도록 구현되어 있고, 인터페이스에 대해서는 더 강략한 문법적인 제제를 가하고 있는데요 이러한 이유에 대해 공부해보시면 더욱 좋을것 같네요.

#다중상속문제점 #다이아몬드상속 이런 키워드로 검색해서 읽어보시면 될것같아요.
answered (282 point)
그게 고민이네요. 계속 중첩되는 메모리 레이아웃 때문에 구조가 복잡해질 수 있고, 멤버 변수가 중첩될 수 있어서 다중상속을 피하는 게 좋다고 알고는 있는데, goto가 적절히 사용하면 좋은 것 처럼 다중상속도 적절하게 사용하면 득이 되지 않을까라는 생각이 드네요. 이건 저 스스로 작성하는 코드라 데이터 멤버가 겹치게 작성할 일은 없겠지만 또 다중 상속이 복잡해지면 다른 사람이 코드를 봤을 땐 안좋아 보일 수도 있고.. (포폴로 사용할거라..ㅋㅋ)
goto가 적절히 사용하면 좋은건 맞지만 저는 자바와 C#을 보면서 다중상속과 인터페이스의 맴버변수에 대한 고민은 이미 어느정도 정리가 되었다는 생각이 드네요. 차라리 윗분 말씀대로 추상클래스로 개발해보시는건 어떨가 싶어요.

특히나 포폴로 사용하실거라면 '내가 관습이 왜 생겼는지에 대한 이해가 깊다'는걸 보여주는 쪽이 더 좋지않을까요? ㅎㅎ

물론 제가 예전에 본 윈도우98의 소스코드엔 다이아몬드상속도 있긴 했습니다만 ~_~;; 결국 선택은 스스로 하셔야 할겁니다 ㅋ

감사합니다. 그런데 제가 잘못이해하고 있는건지.. 추상 클래스를 사용해도 다중 상속은 여전히 하게 되는 것이 아닌가요? 저는 원래 일반 object 클래스에 공격력에 관한 인터페이스, 움직임에 관한 인터페이스, 생명에 관한 인터페이스 등을 상속해서 조합하려고 했거든요..

공격력을 가지는 오브젝트 클래스 하나를 추상클래스로 만들라는 말씀이신건가요..? 잠깐 구조에 대해 생각을 해봐야겠군요

 

조금 더 깊게 고민해봐야겠습니다 허허..

다중상속이 필요하다고 생각하시면 인터페이스로 설계하셔야 하고,

비슷한 내용을 중복해서 구현해야 하는 점이라면 추상 클래스로 해결할 수 있겠죠.

좋은 고민을 하고 계시네요. 조만간 유니티의 설계방식인 컴포넌트 구조에 대해 고민하게 되실것 같습니다. ㅎ
아아 인터페이스를 여러개 상속하는 것은 다중상속이라고 하지 않는군요. 덕분에 컴포넌트 구조라는 것에 대해서도 알게 되었네요.. 감사합니다.
+1 vote
일일히 정의하는 것 맞습니다.

그게 싫으시면 인터페이스가 아니게 만드셔야 합니다.
answered (106 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

482 질문
636 answers
613 댓글
87,361 users