객체 지향 설계와 Spring 연관성
💡Spring 애기에 왜 객체 지향 이야기가 나오는가?
Spring 은 아래 기술로 객체 지향의 특징인 다형성과 OCP, DIP 를 가능하게 지원한다.
- DI (Dependency Dependency) : 의존 관계, 의존성 주입
- DI 컨테이너 제공
- Java 객체들을 어떤 컨테이너 안에 넣어 놓고 이 안에서 의존 관계를 서로 연결해주고 주입해주는 기능
- 위와 같은 기술을 활용하면, 클라이언트 코드 변경 없이 기능 확장 가능
- 쉽게 부품을 교체하듯이 개발 가능
Spring이 없던 시절..
- 어떤 개발자가 좋은 객체 지향 개발을 하려고 OCP, DIP 원칙을 지키며 개발을 해보니, 만들어야할 것들이 너무 많아서 배보다 배꼽이 큰 상황이 되어버렸다.
- 그래서 OCP, DIP 원칙들을 프레임워크로 만들어버렸다..!
- 순수한 Java 로 OCP, DIP 원칙들을 지키면서 개발을 해보면, 결국 Spring Framework 와 같은 기능을 만들게 된다. (더 장확히는 DI 컨테이너)
정리
💡정리
- 모든 설계에 역할(인터페이스)과 구현(구현체)을 분리해야 한다.
- 애플리케이션 설계도 공연을 설계하듯 배역만 만들어두고 배우는 언제든지 유연하게 교체하고 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계이다.
- 이것을 가능하게 하려면, 다형성 뿐만 아니라 OCP, DIP 원칙을 모두 준수해야 한다.
- 다형성, OCP, DIP 를 가능하게 하려면 중간 역할이 필요한데, 그게 바로 Spring Container 이다.
💡이상적으로는 모든 설계에 인터페이스를 부여하는 것이 좋다.
- 이상적으로는 모든 설계에 인터페이스를 부여하는 것이 좋다.
- 장점 : 인터페이스를 먼저 작성 후 하부 구현 기술들에 대한 선택을 미룰 수 있다. → 변경 범위가 작아 유연
- ex. 어떤 DB를 사용하지 미정일 때 (RDB, NoSQL, 관계형 DB 등), 인터페이스만 정의 해놓고 우선 다른 부분을 개발 가능하다.
- ex. 할인 정책을 개발해야 하는데 아직 구체적으로 정채지지 않았을 때, 할인 정책에 대한 인터페이스를 만들고 간단한 구현체만 작성해놓고 개발 가능하다. (0원 할인 처럼)
💡실무론적 고민
- 이상적으로는 인터페이스를 도입하는 것이 좋지만, 무분별한 도입은 '추상화'라는 비용이 발생한다.
- 추상화가 되면, 개발자가 코드를 한번 더 열어봐야 하는 상황이 발생한다.
- 추상화가 됨으로써 장점도 있지만, 발생하는 단점을 넘어설 때 선택을 해야한다.
- 따라서 추천하는 방법은, 기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩토링해서 인터페이스를 도입하는 것
출처
스프링 핵심 원리 - 기본편| 김영한 - 인프런 강의
현재 평점 5.0점 수강생 49,149명인 강의를 만나보세요. 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 스프링 기본 기능, 스프
www.inflearn.com
'Java Framework > [인프런] 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
| [Spring] 좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2026.01.26 |
|---|---|
| [Spring] 좋은 객체 지향 프로그래밍이란? (0) | 2026.01.23 |
| [Spring] Spring 이란? (0) | 2026.01.22 |