본문 바로가기
스터디/F-lab

[F-lab] 2주차 정리_자바

by 책 읽는 개발자_테드 2021. 8. 24.
반응형

과제

 

Rational 클래스 구현

https://github.com/ShimSeoungChul/flab-java-study/tree/main/Rational

 

'is A' 관계란?

- A는 B타입이다'라고 말할 수 있는 관계 ex) 사과는 과일타입이고, 자동차는 운송수단타입

- 객체지향 프로그래밍에서 상속으로 나타낼 수 있는 관계를 나타냄

 

출처

https://pacs.tistory.com/entry/C-%EC%83%81%EC%86%8D-%EC%84%B8%EB%B2%88%EC%A7%B8-%EC%83%81%EC%86%8D%EC%9D%98-%EC%A1%B0%EA%B1%B4-is-a-%EC%99%80-has-a-%EA%B4%80%EA%B3%84

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 필드로 다른 클래스의 인스턴스를 참조하는 설계 방법이다.

https://ko.myservername.com/java-composition-what-is-composition-java

 

 

상속(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

댓글