우아한 테크코스/테크코스

[Java] 상속 관련 궁금한 부분

jamie. 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 상속을 이용하지 않고 구현을 해야하는지 잘 모르겠다. 사실 코드가 돌아가는건 모두 가능하긴 할텐데 어떤게 적합한 방법인지, 어떻게 사용하는게 표준인지 모르겠다.

반응형