CVillain
[Spring] 객체 지향 설계와 스프링 본문
스프링과 객체 지향
- 스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원
- DI(Dependency Injection) : 의존관계, 의존성 주입
- DI 컨테이너 제공
- 클라이언트 코드의 변경 없이 기능 확장
- 쉽게 부품을 교체하듯이 개발
스프링이 없던 시절에는
- 좋은 객체 지향 개발을 하려고 OCP, DIP 원칙을 지키면 업무량이 너무 많아짐
→ 그래서 아예 프레임워크로 만듬 - 순수하게 자바로 OCP, DIP 원칙을 지키면서 개발해보면, 결국 스프링 프레임워크(DI 컨테이너)를 만들게 됨
정리
- 모든 설계에 역할과 구현을 분리하자! → 자동차, 공연의 예시
- 인터페이스와 구현 클래스를 분리하자!
- 애플리케이션 설계도 공연을 설계 하듯이 배역만 만들어두고, 배우는 언제든지 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계이다.
→ 다형성뿐만 아니라 OCP, DIP 원칙 준수 ※이를 위해 스프링 컨테이너가 필요!
- 이상적으로는 모든 설계에 인터페이스를 부여하자!
- 기술적으로 어떤 데이터베이스를 사용할 지 정해지지 않았을 때, 심지어 관계형 DB를 쓸 지 NoSQL을 쓸 지 조차도 정해지지 않았을 때 인터페이스로 정의해두면 용이하다.
- 할인 정책 같은 것이 구체적으로 정해지지 않았을 때, 할인 정책의 간단한 인터페이스와 구현체를 만들고 바로 개발을 진행할 수 있다.
- 즉, 구체적인 구현 기술에 대한 선택을 최대한 미룰 수 있는 장점이 있다.
- 실무적인 고민
- 인터페이스를 도입하면 추상화라는 비용이 발생
- 성능에 대한 문제가 아님
- 런타임에 하위 구현 기술을 채택하는 경우도 있음
- 인터페이스만 가지고 구현체를 알 수 없음 → 개발자가 코드를 한 번 더 들여다 봐야한다.
- 기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩터링해서 인터페이스를 도입하는 것도 하나의 방법
- 인터페이스를 도입하면 추상화라는 비용이 발생
'Java > Spring' 카테고리의 다른 글
[Spring] 좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2021.08.30 |
---|---|
[Spring] 좋은 객체 지향 프로그래밍 (0) | 2021.08.25 |
[Spring] 스프링이란? (0) | 2021.08.24 |
[Spring] 스프링 역사-2 (0) | 2021.08.22 |
[Spring] 스프링 역사-1 (0) | 2021.08.20 |
Comments