좋은 객체 지향 프로그래밍??

  1. 객체 지향 프로그래밍의 의미
    • 프로그램 명령을 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, “객체”들의 모임으로, 각각의 객체 끼리 데이터를 주고 받으며 처리 할 수 있는 프로그래밍을 말한다.
    • 객체 지향 프로그래밍은 “유연” 하고 “변경”이 용이 하여 대규모 소프트웨어 개발에 많이 사용된다.

⎈ 객체 지향의 유연, 변경 용이??

  • 레고 블럭 조립하듯이
  • 키보드, 마우스 갈아 끼우듯
  • 컴퓨터 부품 갈아 끼우듯
  • 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법
  1. 객체 지향 특징
    • 추상화
    • 캡슐화
    • 상속
    • 다형성 ⇒ 객제지향 프로그래밍에서 가장 중요

다형성의 실세계 비유

  • 역할과 구현으로 세상을 구분
  • 역할 ⇒ 인터페이스
  • 구현 ⇒ 역할을 구현한 실제 객체

⇒ 자동차 역할 에 k3, 아반떼, 테슬라 무엇이 오든 상관 없이 운전자는 자동차를 사용할 수 있다.

 

⇒ 로미오, 줄리엣 역할을 누가 하든 로미오나 줄리엣에 영향을 끼치지 않고 변환이 가능하다.

 

 

역할(인터페이스)과 구현(객체)을 분리 의 장점

  • 사용자 (Client) 는 구현 까지 알 필요 없고 역할 (인터페이스) 만 알면 되고, 구현 (내부 구조) 는 몰라도 되며, 구현 (내부 구조) 가 변경이 되어도 영향을 받지 않는다. 그리고 구현 자체를 변경하여도 클라이언트는 영향을 받지 않는다.

역할 과 구현의 분리 한계 점

  • 인터페이스가 변경이 되면 클라이언트 와 서버 모두 큰 변경이 발생 한다.

다형성의 본질

  • 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있는 것

⇒ 클라이언트가 car 라는 인터페이스를 사용할 때 인터페이스와 클라이언트 변경 없이 그때그때 원하는 것을 사용할 수 있게 해주는 것


OCP 원칙 (Open-Closed Princilpe)

  • 좋은 객체 지향 설계 원칙 중 하나로 OCP 원칙이라는 것이 있다.
  • Open for extension : 새로운 기능의 추가나 변경 사항이 생겼을 때, 기존 코드는 확장할 수 있어야 한다. ⇒ 확장의 기능
  • Closed for modification : 기존의 코드는 수정되지 않아야 한다.

⇒ 결론 : 기존 코드의 수정 없이 새로운 기능을 추가할 수 있다는 의미, 다형성이 바로 이 OCP 원칙을 잘 키고 있는 코드이다.

⇒ NewCar 가 추가 되어도 기존 코드 Car 나 Driver 의 코드에 변경 없이 잘 사용 된다.

  • Open 의미 ⇒ Car 인터페이스를 사용해 새로운 차량을 자유롭게 추가할 수 있는 의미, 그리고 클라이언트인 Driver 오 Car 인터페이스를 통해 추가된 차량을 자유롭게 호출할 수 있다. 이것이 확장에 열려 있다는 의미이다.
  • Closed 의미 ⇒ 새로운 차가 추가 되었을 때 당연히 어딘가의 코드는 수정 되지만, 핵심 부분인 Car 나 Driver 부분이 수정 되지 않는 뜻 이다.

+ Recent posts