일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Transactio
- JWT
- 오어스
- Elk
- circuitbreaker
- 동시성문제
- spirng
- AOP
- tomcat
- DispatcherServlet
- redis
- oauth
- Thread
- 우테코 5기
- 톰캣
- 트랜잭션
- MDC
- 우테코
- Gateway
- 테스트코드
- HikariCP
- Spring cloud gateway
- 커넥션 풀
- 살아남았다.
- resilience4j
- Kotlin
- Spring Batch
- 최종 합격
- 우아한테크코스
- 우아한 테크 코스
- Today
- Total
코딩은 내일부터
[우테코] 우아한테크코스 생존기 (2)(상속과 조합) 본문
우리가 이번 블랙잭미션을 했을 때 상속을 많이 사용했을 것이다.
왜냐하면 상속을 사용하면 코드를 재사용함으로써
중복을 줄일 수 있다고 알고 있어 그렇게 사용했을 것이다.
그러면 상속의 단점을 알아보겠다.
상속의 단점은 캡슐화를 깨뜨린다는 단점이 존재한다.
캡슐화란 만일의 상황(타인이 외부에서 조작)에 대비해 외부에서 특정
속성이나 메스들을 사용할 수 없도록 숨겨놓는 것을 의미하는데
상속은 상위 클래스의 구현이 하위 클래스에 노출되는 상속은 캡슐화를 깨뜨린다.
캡슐화가 깨짐으로써 하위 클래스가 상위 클래스에 강하게 결합, 의존하게 되고
강한 결합, 의존은 변화에 유연하게 대처하기 어려워진다.
그러면 책에도 그렇고 많은 사람은 상속보다는 조합을 사용하라고 말을 하고 있다.
그럼 조합으로 넘어가 보면
조합(Composition)이란 기존 클래스가 새로운 클래스의 구성요소로 쓰인다.
새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조한다 하고 나와 있다.
아래 코드는 조합을 사용하고 있는 BlackjackGame클래스 이다.
public class BlackjackGame {
private final Participants participants;
private final Deck deck;
BlackjackGame클래스 안에 Participants 와 Deck클래스를
인스턴스 변수로 가지고 있고 각 각의 클래스의 메서드를 호출할 수 있다.
조합을 사용하면 메서드를 호출하는 방식으로 동작하기 때문에 캡슐화를 깨뜨리지
않을 수 있고 기존 클래스의 변화에 영향이 적어지며, 안전하다.
그러면 지금까지 인스턴스 변수로 클래스를 가지고 있고 메서드를 호출하는 것의 개념이 조합이라는 것을 알 수 있다.
조합에는 일시적인 협력이냐 영구적인 협력이냐에 대한 차이있는데
위에 예시는 영구적인 협력이고 아래 보시는 코드는
public class BlackjackGame {
public BlackjackGameResult generatePlayersResult(BlackJackReferee referee) {
BlackjackReferee라는 클래스를 파라미터로 받아와 generatePlayersResult함수 내에서 쓸 수 있는데
이러한 상황을 일시적인 협력을 하고있다고 볼 수 있다.
(영구적 - 인스턴스 변수 / 일시적 - 메서드파라미터로만 있으면 된다)
그렇다면 상속을 사용하지않고 조합만을 사용하면되지않을까? 같은 생각이 들 수 있다.
이것은 java의 api 구현하는 과정을 보면 알 수 있다.
api는 가장 처음에는 기능들을 모두 작성을 해서 작동 되는지 확인한다.
그다음 공통되는것 을 다 조합으로 바꿔본다.
그 다음 이미 안정 됐고 변경점이 더 이상 없을 것 같을 때 상속으로 구현을 확정짓는다.
이러한 과정을 미루어 보았을 때조합보다 상속의 장점은 인스턴스 변수가 필드로 없어도 되고
participants.getParticipants~ 와 같은 부수적인 관계를 사용하지 않고 줄일 수 있다는 장점이 있다.
'우아한 테크 코스(우테코) > 우테코 공부' 카테고리의 다른 글
[우테코] 우아한테크코스 생존기 (6)(@Repository의 예외처리) (6) | 2023.04.22 |
---|---|
[우테코] 우아한테크코스 생존기 (5)(DI 와 빈 스코브) (3) | 2023.04.22 |
[우테코] 우아한테크코스 생존기 (4)(스프링이란) (4) | 2023.04.22 |
[우테코] 우아한테크코스 생존기 (3)(객체의 선언과 초기화 , 양방향 의존성) (0) | 2023.03.27 |
[우테코] 우아한테크코스 생존기 (1)(방어적 복사) (3) | 2023.02.27 |