Java Framework/[인프런] 스프링 핵심 원리 - 기본편

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

annovation 2026. 1. 27. 22:26

객체 지향 설계와 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원 할인 처럼)

💡실무론적 고민

  • 이상적으로는 인터페이스를 도입하는 것이 좋지만, 무분별한 도입은 '추상화'라는 비용이 발생한다.
  • 추상화가 되면, 개발자가 코드를 한번 더 열어봐야 하는 상황이 발생한다.
  • 추상화가 됨으로써 장점도 있지만, 발생하는 단점을 넘어설 때 선택을 해야한다.
  • 따라서 추천하는 방법은, 기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩토링해서 인터페이스를 도입하는 것

출처

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

 

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

현재 평점 5.0점 수강생 49,149명인 강의를 만나보세요. 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 스프링 기본 기능, 스프

www.inflearn.com