[JAVA]김영한의 실전 자바 ; 다형성과 설계

선뀰·2024년 1월 9일
0

JAVA

목록 보기
21/25
post-thumbnail

객체 지향 특징

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 객체 들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고 받고, 데이터를 처리할 수 있다. (협력)

객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. (= 레고 블럭 조립하듯이)

  • 자바 언어의 다형성을 활용
    역할 = 인터페이스
    구현 = 인터페이스를 구현한 클래스, 구현 객체

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

  • 객체 설계시 역할(인터페이스)를 먼저 부여하고, 역할을 수행하는 구현 객체 만들기

객체의 협력이라는 관계부터 생각

  • 혼자 있는 객체는 없다.
  • 클라이언트 : 요청, 서버 : 응답
    수 많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.

다형성이 가장 중요

  • 디자인 패턴 대부분은 다형성을 활용하는 것이다.
  • 스프링의 핵심인 제어의 역전(IoC), 의존관계 주입(DI)도 다형성을 활용하는 것이다.

다형성 - 역할과 구현 예제 2

새로운 Model3 차량을 추가해야 하는 요구사항이 들어왔다. 요구사항을 맞추려면 기존에 Driver 코드를 많이 변경해야 한다.

자바에서set을 사용하면 자동적으로 생성해준다.

driver.setK3Car(null)을 통해서 기존 K3Car의 참조를 제거하고 driver.setModel3Car(model3Car)를 통해서 새로운 model3Car의 참조를 추가한다.

자동차의 운전자의 코드를 알아야 하는 단점이 있다.
-> 역할과 구현을 분리해야 한다.

다형성 - 역할과 구현 예제 3

다형성을 활용하면 역할과 구현을 분리해서, 클라이언트 코드의 변경 없이 구현 객체를 변경할 수 있다.

OCP (Open-Closed Principle)원칙

  • Open for extension : 새로운 기능의 추가나 변경 사항이 생겼을 때, 기존 코드는 확장할 수 있어야 한다.
  • Closed for modification : 기존의 코드는 수정되지 않아야 한다.

확장에는 열려있고, 변경에는 닫혀 있다는 뜻인데, 기존의 코드 수정 없이 새로운 기능을 추가할 수 있다는 의미다. OCP 원칙을 잘 지키고 있는 코드이다.

  • 확장에 열려있다.
    Car 인터페이스에 있는 클라이언트 코드인 Driver도 Car 인터페이스를 통해 자유롭게 호출할 수 있다.

  • 코드 수정은 닫혀 있다
    새로운 차를 추가하게 되면 기능 추가로 인해 기존 코드의 수정은 불가피하다.

  • 변하지 않는 부분
    Car인터페이스를 사용하는 클라이언트인 Driver의 코드를 수정하지 않아도 된다.

  • 변하는 부분
    main()과 같이 차를 생성하고, Driver에게 필요한 차를 전달해주는 역할은 코드 수정이 발생한다. main()은 전체 프로그램을 설정하고 조율하는 역할을 한다.

전략 패턴

디자인 패턴 중에 가장 중요한 패턴이다. 알고리즘을 클라이언트 코드의 변경 없이 쉽게 교체할 수 있다. Car 인터페이스가 전략을 정의하는 인터페이스, 각각의 차량이 전략의 구체적인 구현, 전략을 클라이언트 코드(Driver)의 변경 없이 손쉽게 교체할 수 있다.

문제 풀이

  • 다중 메시지 발송
    Alt + enter를 누르면 자동으로 클래스가 생성된다.
    Sender 인터페이스를 생성하여
    void sendMessage(String message); 생성한다.
profile
공부 기록

0개의 댓글