본문 바로가기
프로그래밍/Java

[실전 자바-기본편] 객체 지향 프로그래밍

by Dean30 2024. 2. 25.
728x90

객체 지향 프로그래밍

  • 요소
    • 추상화
    • 캡슐화
    • 상속
    • 다형성 - 제일 중요 !
  • 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (협력)
  • 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 떄문에 대규모 소프트웨어 개발에 많이 사용된다.
    • 레고 블럭 조립하듯 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법

 

다형성의 실세계 비유

  • 실시계와 객체 지향을 1:1로 매칭되진 않지만, 비유하기 좋음
  • 역할 구현으로 세상 구분

 

 

다형성의 실세계 비유

  • 운전자 - 자동차
    • 어떤 자동차든 운전자는 상관없이 운전할 수 있다.

  • 배역 - 실제 배우
    • 배우가 아플 때 다른 배우가 땜빵 가능
  • 키보드, 마우스, 세상의 표준 인터페이스들
  • 정렬 알고리즘
  • 할인 정책 로직

 

역할과 분리 시

  • 핵심은 클라이언트가 편함
    • 내부 구현이 변경되어도 영향을 받지 않는다
  • 인터페이스만 알면 됨
    • 내부 구조를 세세히 다 몰라도 됨

 

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

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

 

다형성의 본질

  • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
  • 다형성의 본질을 이해하려면 협력이라는 객체사이의 관계에서 시작해야함
  • 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
    • interface로 정의되어 있으면 어떤 종류의 차가 들어와도 상관없고 클라이언트 코드가 바뀌지 않음

 

 

 

k3와 model3 차동차 예제

 

 

 

OCP(Open-Closed Principle) 원칙

좋은 객체 지향 설계 원칙 중 하나로 OCP 원칙이라는 것이 있다.

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

 

기존의 코드 수정 없이 새로운 기능을 추가할 수 있어야 한다는 의미

 

새로운 차량이 추가되어도 Driver의 코드는 전혀 변경되지 않는다.

  • main() 내부에서 차량 인스턴스 생성 및 setCar, driver()를 호출하니, 이 부분이 클라이언트라 생각했었고 이 부분에 수정이 없어야 OCP 원칙이 지켜지는 것이 아닌가 라고 생각했었다.
    • 이런 부분은 OCP를 지켜도 변경이 필요하다.
  • 하지만 Car의 사용자 객체인 Driver가 클라이언트라 생각해야함
    • Car interface를 사용하는 클라이언트인 Driver ! 인터페이스를 사용하는 곳이 클라이언트이다 !
    • 클라이언트: Driver, 서버: Car !!!!!

 

728x90

댓글