2019.03.22 TIL
(TIL은 스스로 이해한 것을 바탕으로 정리한 것으로 오류가 있을 수 있습니다)
# 질문에 답하기
- is-a / has -a에 관해 이야기 해보시오
궁극적으로 코딩이란 클래스 간의 계층 구조를 만들고 설계하는 것
좋은 설계와 나쁜 설계
- 다 크게 만들어 놨는데 클라이언트가 특정 기능을 추가해달라고 했는데 미친듯이 클래스가 변경해야되면 나쁜 설계이다.
- 좋은 설계는 (궁극적인 목표) 기능이 추가되는 그 클래스 한개만 변경이 되고 나머지는 완벽히 닫혀져 있는 상태(Open-closed)
- 이것을 위해 design pattern이 필요하고 이게 GOF(gang of Four) - 20개 이렇게 하면 open-closed에 근접해 갈 수 있다.
- 이것을 가기 위해 가장 밑바닥의 지식이 상속이다.
클래스와 클래스 사이의 관계 설정 방법
- 클래스와 클래스 사이의 관계에는 Is -A 와 Has - A 가 있다.
- 클래스와 클래스 사이의 관계 설정 방법
- is-a ( is - a는 상속이용)
- 첫번째 조건 모든 멤버와 메서드가 중복이 되어야 한다.
- 부모가 가진 멤버와 메서드 중 단 한개라도 가지지 않으면 사용할 수 없다.
- 상속 받은 모든 멤버와 메서드를 가지게 되어 재사용성이 가능해진다.
- is-a가 아닌데 재사용만하고 싶으면 composition을 통해 구현해야 한다.
- 언제 상속을 쓰나?(1번 조건을 전제하에)
- 멤버가 추가될 때
- 메서드가 추가 될 때
- has - a (논리적으로 조금 차이가 있다)
- 객체의 멤버로서 다른 객체를 포함해서 사용한다.(composition, aggregation 둘다 대전제)
- 상속이 아니다. 서로 has-a관계 일 때 composition 혹은 aggregation을 활용
- composition(합성)
- 코드 재사용을 위해서 관계를 구축하는 거라면 상속보다 컴포지션을 이용한다.
- same life cycle
- 객체들의 생성 시점과 소멸 시점이 같다.
- strong coupled
- 객체들의 생성 시점이 같다.
- 객체들의 소멸 시점이 같다.
- cpu, ram, computer는 강하게 커플링 되어 있다.
- aggregation(통합)
- Not same life cycle
- weak coupling
- 내가 필요할 때만 받아서 쓰고 필요없으면 반납한다.
- 클래스와 클래스 사이의 관계 설정 방법
정리
IS-A
- A laptop IS - A computer
- ~클래스은 ~클래스의 한 종류이다.
- inheritance(상속)으로 구현
HAS-A(합성).
- A policeman has a gun.
- ~이 ~을 가지고 있다. or 포함하고 있다.
- composition(합성) or aggregation(통합)