과제
Rational 클래스 구현
https://github.com/ShimSeoungChul/flab-java-study/tree/main/Rational
'is A' 관계란?
- A는 B타입이다'라고 말할 수 있는 관계 ex) 사과는 과일타입이고, 자동차는 운송수단타입
- 객체지향 프로그래밍에서 상속으로 나타낼 수 있는 관계를 나타냄
출처
https://stackoverflow.com/questions/2218937/has-a-is-a-terminology-in-object-oriented-language
Prefer composition over interitance
Composition이란?
- 클래스에서 private 필드로 다른 클래스의 인스턴스를 참조하는 방식으로 기능을 확장하는 설계 방법이다. 즉, 하나의 객체가 다른 객체를 부분으로 갖고있는 형태다.
- 이를 'has-a' 관계를 가지고 있다고 한다.
예시
class Car{
private Engine;
Car(Egine engine){
this.engine = engine;
}
}
inheritance과 composition의 차이점
상속(inheritance)은 'is-a' 방식으로 코드를 재사용한다. 자바에서는 하위 클래스를 extends 예약어로, 인터페이스는 implements 예약어로 상속할 수 있다.
컴포지션(composition)은 'has-a' 방식으로 코드를 재사용한다. 이는 클래스에서 private 필드로 다른 클래스의 인스턴스를 참조하는 설계 방법이다.
상속(inheritance)은 코드를 재사용하는 강력한 수단이지만 다음과 같은 단점이 있다.
1. 캡슐화를 깨뜨릴수 있음 (새로운 릴리즈에서 내부 구현이 달라지만, 하위 클래스가 오작동할 수 있음)
2. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만듦
ex) 상위 클래스의 새로운 메서드를 추가했는데, 운 나쁘게 하위 클래스의 시그니처가 같고 반환이 다른 메서드가 있을 경우 하위 클래스는 더 이상 컴파일 되지 않음
이러한 문제를 해결하는 설계 방식으로 컴포지션이 존재한다. 컴포지션을 사용하면,
1. 새로운 클래스가 기존 클래스의 내부 구현 방식의 영향에서 벗어날 수 있고, (오버라이딩하지 않으므로)
2. 기존 클래스에 새로운 메서드가 추가되어도 영향을 받지 않는다.
출처: 이펙티브 자바
https://ko.myservername.com/java-composition-what-is-composition-java
'스터디 > F-lab' 카테고리의 다른 글
[F-lab] 7주차 정리 - 웹 프로그래밍 기초와 JSP (0) | 2021.10.07 |
---|---|
[F-lab] 5주차 정리 (0) | 2021.09.14 |
[F-lab] 3주차 정리_자바 (0) | 2021.08.31 |
댓글