Java

다형성(3) - OCP

공부처음하는사람 2024. 6. 13. 12:03

 

객체지향의 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만든다.

- 레고 블럭 조립하듯

- 키보드 마우스 갈아 끼우듯

- 컴퓨터 부품 갈아 끼우듯

- 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법

 

출처: 김영한 자바 basic - 다형성

 

운전자(클라이언트), 자동차 역할(인터페이스) K3, 아반떼, 모델3 (구현체)

 

운전자는 자동차의 역할만 알면 된다. k3를 운전하다 아반떼를 운전한다고 운전을 못하게 되는건 아니다.

출처: 김영한의 실전자바 basic - 다형성

 

로미오 역할 (인터페이스)는 대본만 있다면 장동건이 하던, 원빈이 하던 아무 상관이 없다. 내가 들어가도 문제가 없다.(?)

 

줄리엣 역할도 마찬가지로 김태희가 하지 않는다고 해서 줄리엣 역할이 변하게 되는건 아니란 것이다.

 

역할과 구현을 분리하자

역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며 변경도 편리해진다.

- 클라이언트는 역할(인터페이스)만 알면 된다.

- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다. (K3의 내부구조를 알아야 운전하는게 아니다.)

- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다. (K3의 부품을 갈아 끼웠다고 운전을 못하게되는게 아니다.)

- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다. (K3 -> 아반떼로 갈아타도 운전을 할 수 있다.)

 

역할(인터페이스), 구현(인터페이스를 구현한 클래스)

 

객체를 설계할 때 역할과 구현을 명확히 분리하자

 

 

혼자 있는 객체는 없다.

클라이언트는 요청을 하고 서버는 응답을 한다.

(서버에서 요청하는 경우도 있다)

출처: 김영한의 실전 자바 basic - 다형성
출처: 김영한의 실전자바 basic - 다형성

 

 

OCP (Open - Close Principle) 원칙

SOLID 원칙중 O (개방폐쇄 원칙)

- 새로운 기능의 추가나 변경이 있을 때 기존 코드는 확장할 수 있어야한다.

- 기존의 코드는 수정되지 않아야한다.

 

확장이란

- 인터페이스를 사용해서 새로운 구현체를 자유롭게 추가할 수 있다. 그리고 인터페이스를 사용하는 클라이언트 코드에서도 인터페이스를 통해 새로 추가된 구현체를 자유롭게 호출할 수 있다. 이것이 확장에 열려있다는 의미이다.

 

코드 수정은 닫혀있다는 의미

- 새로운 구현체를 추가하게 되면 기능이 추가되기 때문에 기존 코드의 수정은 불가피하다. 당연히 어딘가의 코드는 수정해야한다.

 

변하지 않는 부분

- 새로운 구현체를 추가할 때 가장 영향을 받는 중요한 클라이언트는 (예제로 예를 들 경우 Car의 기능을 사용하는) Driver 클래스이다. 

핵심은 Car 인터페이스를 사용하는 클라이언트인 Driver는 코드를 수정하지 않아도 된다.

 

변하는 부분

main메서드는 당연히 코드 수정이 발생한다. 

 

 

전략패턴(Strategy Pattern)

디자인 패턴 중 가장 중요한 패턴을 뽑으라고 하면 전략 패턴을 뽑을 수 있다. OCP 원칙을 사용한 개념과 같다.

(나중에 따로 검색해서 공부)

 


 

이번 강의 3줄요약

- 다형성 너무너무 중요하다. 공부많이해

- 디자인패턴 대부분 다형성을 활용한다. 다형성 모르면 아무것도 못한다

- IoC, DI도 결국 다형성을 활용하는 것

 

기본편 강의를 마무리로 책으로 학습을 해야겠다.

도저히 제네릭 컬렉션을 20시간동안 들을 자신이 없다..

 

추가로 공부하기 어려운 점이 있다면 강의를 결제해서 참고해야겠다.

'Java' 카테고리의 다른 글

이것이 자바다 - 열거(Enum) 타입  (0) 2024.06.17
이것이자바다 - 배열  (1) 2024.06.15
다형성 (2) - 추상클래스, 인터페이스  (0) 2024.06.12
다형성 (캐스팅, 메서드 오버라이딩)  (1) 2024.06.10
상속  (0) 2024.06.07