Java/Spring

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

필리힐리 2021. 8. 28. 20:44

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 개발자가 되어보세요! 📣 확인해주

www.inflearn.com

 

다형성

역할과 구현

  • 역할구현으로 세상을 구분
    - 운전자 (운전을 하는 역할) - 자동차 (운전자를 일정 구역에 이동시키는 역할)
    - 여기서 그랜저테슬라로 바꿔도 자동차 역할만 한다면 아무 문제 없음
    - 그리고 운전자는 그냥 운전하는 역할만 충실하면 됨

  • 클라이언트는 구현 대상의 내부 구조가 바뀌어도 영향 받지 않는다.
    - 대상의 역할(인터페이스)만 알면 됨
  • 역할과 구현을 프로그램 관점에서 보면 역할은 인터페이스, 구현은 인터페이스를 구현한 객체이다.

 

장점

  • 역할과 구현을 구분함으로서 변경이 용이하고 확장성이 높다.
    예시
    - VIP는 할인을 한다는 정책이 있는데 클라이언트 측에서 얼마나 할인을 적용할 지 결정을 못했고 나중에 아예 할인을 안하는 경우가 있을 수 있다고 해보자
    - 좋은 객체 지향 설계에서는 정책이 결정될 때까지 개발을 기다리는 게 아니라 역할과 구현을 나눴기 때문에 인터페이스(역할)와 임시 구현 객체(구현)을 만들어 놓고 최종 결정이 나면 구현을 시작해 인터페이스에 끼우기만 하면 된다.

  • 인터페이스를 안정적으로 잘 설계하는 것이 중요함
  • 여기서 안정적이라는 건 이후에 변화가 없도록 설계한다는 의미

 

스프링에선?

  • 스프링은 @bean 등록 @autowired 어노테이션을 통한 IOC, DI 기능들로 다형성을 극대화해서 이용할 수 있게 도와준다.

 

다형성이 가장 중요!

 

SOLID 법칙

SRP 단일 책임 원칙

  • 한 클래스는 하나의 책임만 가져야한다.
    개발을 하다보면 이 원칙이 깨지는 경우가 있지만 이를 잘 조절해 하나의 책임만을 가질 수 있게 노력해야함
  • 변경이 있을 때 파급효과가 적으면 원칙을 잘 따른 것

 

OCP 개방-폐쇄 원칙

  • 다형성 활용
  • 소프트웨어 요소는 확장(다형성을 이용해 모듈 변경)은 자유롭게 하지만 변경(Service - 클라이언트 쪽 로직)은 없어야한다.

 

LSP 리스코프 치환 원칙

  • 컴파일 성공을 넘어 인터페이스 규약을 다 지켜야함
    예를 들어 자동차 인터페이스의 엑셀은 앞으로 가는 기능, 뒤로 가면 위반

 

ISP 인터페이스 분리 원칙

  • 특정 클라이언트를 위한 범용 인터페이스 보단 기능을 분리해 여러 인터페이스를 만드는 게 좋다.
    자동차 > 운전, 정비
    사용자 > 운전자, 정비사
    분리함으로써 얻는 장점 : 운전 관련 기능을 변경하고 싶으면 운전 인터페이스 변경, 정비 관련 기능 변경하고 싶으면 정비 인터페이스 변경으로 각각 다른 인터페이스를 변경하기 때문에 서로 영향을 주지 않는다.

 

DIP 의존관계 역전 원칙

  • 클라이언트 클래스 (Service)는 인터페이스랑만 교류가 있어야함, 리파지토리의 상태는 몰라야한다.
    즉 서비스와 리파지토리는 의존 관계가 있으면 안되고 리파지토리 인터페이스와 의존관계가 있어야함
  • 각각의 역할을 철저하게 분리

 

 

 

 

 

'Java > Spring' 카테고리의 다른 글

OCP, DIP 위반  (0) 2021.09.03
단일 책임 원칙 예시  (0) 2021.08.31
객체가 주입 & 객체 지향의 장점  (0) 2021.08.25
자바 코드로 스프링 bean 직접 등록  (0) 2021.08.23
컴포넌트 스캔과 자동 의존관계 설정  (0) 2021.08.22