CVillain

[Spring] 객체 지향 설계와 스프링 본문

Java/Spring

[Spring] 객체 지향 설계와 스프링

CVillain 2021. 9. 1. 20:27

스프링과 객체 지향

  • 스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원
    • DI(Dependency Injection) : 의존관계, 의존성 주입
    • DI 컨테이너 제공
  • 클라이언트 코드의 변경 없이 기능 확장
  • 쉽게 부품을 교체하듯이 개발


스프링이 없던 시절에는

  • 좋은 객체 지향 개발을 하려고 OCP, DIP 원칙을 지키면 업무량이 너무 많아짐
    그래서 아예 프레임워크로 만듬
  • 순수하게 자바로 OCP, DIP 원칙을 지키면서 개발해보면, 결국 스프링 프레임워크(DI 컨테이너)를 만들게 됨

 

 

정리

  • 모든 설계에 역할구현을 분리하자! → 자동차, 공연의 예시
  • 인터페이스와 구현 클래스를 분리하자!
  • 애플리케이션 설계도 공연을 설계 하듯이 배역만 만들어두고, 배우는 언제든지 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계이다.
    다형성뿐만 아니라 OCP, DIP 원칙 준수 ※이를 위해 스프링 컨테이너가 필요!

  • 이상적으로는 모든 설계에 인터페이스를 부여하자!
    • 기술적으로 어떤 데이터베이스를 사용할 지 정해지지 않았을 때, 심지어 관계형 DB를 쓸 지 NoSQL을 쓸 지 조차도 정해지지 않았을 때 인터페이스로 정의해두면 용이하다.
    • 할인 정책 같은 것이 구체적으로 정해지지 않았을 때, 할인 정책의 간단한 인터페이스와 구현체를 만들고 바로 개발을 진행할 수 있다.
    • 즉, 구체적인 구현 기술에 대한 선택을 최대한 미룰 수 있는 장점이 있다.

  • 실무적인 고민
    • 인터페이스를 도입하면 추상화라는 비용이 발생 
      • 성능에 대한 문제가 아님
      • 런타임에 하위 구현 기술을 채택하는 경우도 있음
      • 인터페이스만 가지고 구현체를 알 수 없음 → 개발자가 코드를 한 번 더 들여다 봐야한다.
    • 기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩터링해서 인터페이스를 도입하는 것도 하나의 방법

 

 

 

 

 

Comments