본문 바로가기

항해 99/Java

역할과 구현, OCP

항해 99 : TIL - 4

학습 내용 정리

다형성 - 역할과 구현

  • 역할과 구현으로 구분하면 단순해지고, 유연해지며 변경도 편리해짐.
  • 장점
    • 클라이언트는 인터페이스(역할)만 알면 된다.
    • 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
    • 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않음
    • 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않음

자바 언어의 다형성 활용

  • 역할 = 인터페이스
  • 구현 = 인터페이스 구현 클래스, 구현 객체

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

 

객체의 협력 관계

  • 클라이언트 : 요청 , 서버 : 응답

다형성의 본질

  • 클라이언트 변경 없이, 서버의 구현 기능을 유연하게 변경 가능

한계

  • 인터페이스가 변하면 클라이언트, 서버 모두 큰 변경이 발생(인터페이스를 안정적으로 설계하는 것이 중요)

객체 지향에서 가장 중요한 것은 다형성.

 

 

OCP(Open-Closed Principle)

좋은 객체 지향 설계 원칙 중 하나

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

기존 코드의 수정 없이 새로운 기능을 추가할 수 있다.

 

확장에 열려 있음

  • 인터페이스를 사용해 새로운 기능을 자유롭게 추가할 수 있음, 인터페이스를 사용하는 클라이언트도 추가된 기능을 자유롭게 호출 가능

코드 수정은 닫혀 있음

  • 새로운 기능이 추가 되면 기존 코드의 수정은 불가피함

변하지 않는 부분

  • 새로운 기능을 추가할 때 인터페이스를 사용하는 클라이언트는 수정하지 않아도 됨

변하는 부분

  • 전체 프로그램을 설정하고 조율하는 역할을 하는 부분은 OCP를 지켜도 변경이 필요함

 

다형성, OCP, 역할과 구현을 통한 리펙토링 간 느낀 점

  • 코드를 리펙토링하기 위해서는 단계 별로 진행하는 것이 좋음
    • 프로그램에서 역할과 구현을 나누고 클라이언트에서 변하지 않을 부분과 변할 부분을 분리하기
    • 단계 별로 진행하는 도중에도 프로그램 출력이 어떤 식으로 달라지는지 확인하기

 

기술 매니저님 멘토링 내용 요약

  • 알고리즘 문제 진행 시 조건(제약)을 보고 감을 못 잡을 경우 바로 답을 확인하고 답을 통해서 배우기
    • 비슷한 유형의 예제가 많기 때문에 배운 내용을 토대로 다른 문제를 푸는 식으로 공부
    • 프로그래밍 중 다음 스탭으로 넘어가는데 어려움을 겪을 때는 혼자서 시간을 들여서 시도해보고 안 될 경우에는 답변을 보고 코드를 왜 이런 식으로 설계했는지 이해하고 넘어가기
    • 익숙하지 않아서 어려운 것은 비슷한 예제를 많이 푸는 것으로 익숙해지기
  • 좋은 코드를 많이 보는 것도 프로그래밍에 도움이 된다.
  • 어렵거나 이해가 잘 안 되는 부분은 최대한 이해를 하기 위해 복습 등의 노력이 필요하고 다른 사람들과 소통을 통해 배우는 것도 좋음

 

'항해 99 > Java' 카테고리의 다른 글

페어 프로그래밍 - 코딩 테스트  (1) 2024.02.13
WIL - 1  (1) 2024.02.12
Java 기초 12 - 다형성  (1) 2024.02.08
객체 지향, 상속, 다형성  (1) 2024.02.07
연산자, 조건문, 반복문, 배열  (1) 2024.02.06