-
[Java] 상속 관련 궁금한 부분우아한 테크코스/테크코스 2020. 3. 18. 21:08반응형
추가 부분(20200324)
자식클래스에서 새로운 메서드를 정의해서 사용한다면 has-a 관계라고 생각했지만 이는 잘못된 생각.
- 지난번 User <- Player & Dealer의 경우, User에서 너무 많은 역할을 하던 것이 문제(가이드 - 리뷰어 권용근님(_ _)). user가 정말 지녀야 하는 역할, 즉 책임은 무엇일지 생각해보기.
자식 클래스에서는 부모클래스의 인스턴스 변수를 재정의하지 말 것. 또한, 정의된 메서드에 영향이 가는 오버라이딩을 하지 말 것.
고민되는 부분) 부모클래스의 인스턴스 변수를 사용하는 변수를 자식클래스에서 정의한다면, 인스턴스 변수의 변화 감지에 유연할 것인가?
현재 이해한 부분)
자식클래스에서 새로운 메서드를 정의하여 사용해야한다면, 그것은 is-a가 아닌 has-a 관계!
has-a 관계는 조합을 쓰는게 맞음! is-a일 때만 상속을 사용하길 지향!
Has-a 관계는 조합을 쓰는게 맞다고 했는데, 상속을 쓰는게 맞는가?
has-a 관계
is-a 관계로 바꿔보기
User 추상클래스 타입을 갖고있는 Users 클래스는 어떻게 구성해야 하는가
1. List<User>로 통으로 관리
- 고민) getter 사용시 dealer / player라는 클래스 정보를 알고있어야 한다.
2. Dealer/Player로 나누어서 관리
- 고민) 같은 타입의 변수가 두 개!
공통된 고민) Dealer나 Player에 대한 정보를 List<User>가 가지고 있는게 맞는가?
Dealer와 Player는 User 추상클래스를 상속하는 클래스이다. Dealer와 Player는 User의 is-a 관계인 것이 맞는가?
고민하는 부분
1) getFirstTimeCardInfo()에서 딜러는 1장을 보여주고, Player는 카드 전체(2장)를 보여준다. 이것이 메서드의 이름으로 드러나는가? (or 드러날 필요가 굳이 있는가)
2) GameResult를 구할 때, 비교하는 로직은 꼭 앞이 Dealer, 뒤가 Player가 들어가야 한다. 둘의 순서가 바뀌는 경우 응답이 전혀 달라지게 된다. (예 - 딜러와 플레이어가 모두 23점일 때, 플레이어 패, 딜러 승) [배경지식 : GameResult는 Users로 생성한다.]
(2-1) 다형성을 이용해 User로 관리하지 않을거면, User를 상속받을 필요가 있는걸까?
(2-2) Dealer와 Player로 관리할거면, 생성자의 파라미터인 Users의 getPlayers, getDealer 메서드의 리턴타입을 Player / Dealer로 관리할 필요가 있는건 아닌가?, 그렇게 되면 다형성의 이점이 있는가?
궁금한 부분
이럴 경우, 상속을 이용해 구현을 해야하는지, 변경하여 조합을 이용하거나 or 상속을 이용하지 않고 구현을 해야하는지 잘 모르겠다. 사실 코드가 돌아가는건 모두 가능하긴 할텐데 어떤게 적합한 방법인지, 어떻게 사용하는게 표준인지 모르겠다.
반응형'우아한 테크코스 > 테크코스' 카테고리의 다른 글
[HTML/CSS/JS] JS Bin 사용하기 (0) 2020.04.14 [객체지향] 5대원칙 SOLID (0) 2020.03.21 3, 4주차 리뷰 (0) 2020.03.16 [Java] 단위 테스트 명명규칙 (0) 2020.03.16 [객체지향] 다형성 & 추상화 (0) 2020.03.16