본문 바로가기
Learning-log/Spring & JPA

(스프링 핵심 원리 - 기본편) 1-(3) 좋은 객체지향 프로그래밍

by why제곱 2023. 3. 24.

- 객체지향 프로그래밍

  • 컴퓨터 프로그램을 명령어 목록으로 보기보다는 여러 개의 독립된 단위인 객체들의 모임으로 파악하고자 하는 것.
  • 객체는 메시지를 주고 받고 데이터 처리 가능
  • 프로그램을 유연하고 변경이 용이(부품 갈아끼우듯이) 하게 만들기 때문에 대규모 개발에 많이 사용됨.

 

- 다형성 

  • 실세계와 비교해보자. 세상을 역할과 구현으로 구분해본다면! 
    • 운전자 & 자동차 비유 
      • 운전자 & 자동차. 운전자 역할 / 자동차 역할. 이런 자동차 역할을 여러 자동차 회사의 자동차들이 구현
      •  자동차가 바뀌어도 운전자에게 영향을 주지 않음
      • 자동차 역할과 구현을 분리한건 바로 운전자를 위한 것. 자동차의 내부 구조를 운전자가 알 필요가 없고, 자동차가 바뀌어도 운전자는 바뀔 필요가 없다. => 대상을 바꾸지 않고 새로운 자동차를 출시(클라이언트에게 영향을 주지 않고)할 수 있으므로 자동차의 세상을 무한히 확장할 수 있음. 
    • 로미오 & 줄리엣 공연
      • 로미오 역할과 줄리엣 역할 각 역할을 다른 배우가 대체 가능
      • 로미오 역할을 하는 사람은 줄리엣 역할을 누가 하든 대본에만 충실하면 괜찮음.
  • 역할과 구현으로 구분하면 세상이 단순, 유연해지고 변경이 편해짐
  • 클라이언트는 대상의 역할(인터페이스)만 알고 내부구조 몰라도 괜찮아짐.
  • 클라이언트는 구현 대상의 내부구조가 변경 돼도 , 구현 대상 자체를 변경해도 영향받지 않음
  • Java에서 역할 : 인터페이스 / 구현 : 클래스, 구현 객체 

 

- 자바 언어의 다형성

  • 오버라이딩 된 메서드가 실행
  • 클래스 상속 관계도 다형성, 오버라이딩 적용 가능
  • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경 가능
  • 다형성의 본질을 이해하고자 한다면, 협력이라는 객체사이 관계에서 시작.
  • 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경 가능