[Spring] IoC / DI 란 무엇일까?

2025. 1. 22. 07:13·개발/Spring

1. IoC 와 DI는 무엇일까?

 

  • 제어의 역전 (IoC):
    기존에는 개발자가 직접 객체를 생성하고 연결했지만, IoC에서는 IoC 컨테이너가 객체의 생성과 연결을 대신 관리한다.
    즉, 객체 생성및 관리 제어의 주체가 프로그래머에서 IoC 컨테이너로 바뀌었다고 하여,
    제어의 역전(inversion of control)이라고 부른다

  • 의존성 주입(DI):
    IoC의 구체적인 구현 방식 중 하나로, 객체가 필요로 하는 다른 객체(의존성)를 IoC 컨테이너가 외부에서 주입(제공)해주는 방식이다.

 

2. 스프링에서는 IoC를 어떻게 구현하고 있을까?

 

 스프링 IoC 컨테이너는 설정 메타데이터를 읽어들이고 빈을 생성하여 관리하는 방식으로 작동한다.

 

  • IoC 컨테이너: 객체(빈)의 생성, 의존성 관리, 생명 주기 관리 등을 담당하는 객체들의 공장이자 관리자. 스프링에서는 BeanFactory와 ApplicationContext 인터페이스로 제공된다.

  • 빈(Bean):
    IoC 컨테이너에 의해 관리되는 객체.  쉽게 말해, 스프링이 관리하는 객체이다.

  • 설정 메타데이터:
    IoC 컨테이너에게 어떤 빈을 생성하고 어떻게 연결할지 알려주는 설명서. XML, Java Config, Annotations의 세가지 방법으로 작성 할 수 있다.

 

3. IoC 의 이점은 무엇일까?

 

고객알림 서비스라는 인터페이스의 구현체를 기존 이메일방식에서 SMS 방식으로 바꾼다고 생각해보자.

고객알림 서비스가 사용된 코드가 100군데라고 생각하면 100군데의 코드 수정이 일어날것이다.

하지만 IoC 컨테이너를 사용한다고 하면 이메일방식 대신 SMS방식으로 주입한다는 한번의 코드 변경만 일어난다.

목록화 하자면 아래와 같은 이점이 있다.

 

 

  • 낮은 결합도 (Loose Coupling):
    • 객체 간의 의존성이 느슨해져 코드 변경이 용이
    • 인터페이스를 통한 의존성 주입으로, 구현 변경이 다른 코드에 미치는 영향이 최소화
  • 높은 응집도 (High Cohesion):
    • 관련된 코드가 하나의 모듈에 모여 있어 코드의 가독성과 이해도가 향상
    • 각 모듈은 하나의 책임에 집중하여, 유지보수가 쉬워짐
  • 테스트 용이성:
    • Mock 객체를 쉽게 주입하여, 의존성을 제어하고 격리된 환경에서 단위 테스트를 수행할 수 있음
    • 테스트 코드 작성이 간편해지고, 테스트 커버리지를 높일 수 있음
  • 쉬운 유지보수:
    • 코드의 가독성과 재사용성이 높아져 유지보수가 용이
    • 변경의 영향 범위가 작아져, 유지보수 비용이 절감
  • 높은 확장성:
    • 새로운 기능을 추가하거나 기존 기능을 변경할 때, 기존 코드를 수정할 필요가 적음
    • 설정 변경만으로 쉽게 기능을 확장 가능. 
  • 객체 생명주기 관리:
    • 객체의 생성, 설정, 소멸 등의 생명 주기를 컨테이너가 관리해주므로 편리함

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'개발 > Spring' 카테고리의 다른 글

[Spring] 스프링 빈 주입 방법  (0) 2025.03.13
[Spring] 의존성 주입 어노테이션  (0) 2025.03.13
[Spring] 스프링 빈의 라이프 사이클  (0) 2025.01.23
[Spring] 스프링 컨테이너의 종류와 주요 메소드  (0) 2025.01.23
[Spring]스프링 빈을 컨테이너에 등록하는 방법  (0) 2025.01.22
'개발/Spring' 카테고리의 다른 글
  • [Spring] 의존성 주입 어노테이션
  • [Spring] 스프링 빈의 라이프 사이클
  • [Spring] 스프링 컨테이너의 종류와 주요 메소드
  • [Spring]스프링 빈을 컨테이너에 등록하는 방법
함수형 인간
함수형 인간
잘 까먹는 개발자의 두뇌 확장 장치
  • 함수형 인간
    개발 기록 노트
    함수형 인간
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 글 목록 (84)
      • 기타 (1)
      • 개발 (82)
        • Java (6)
        • Javascript (1)
        • Spring (20)
        • jQuery (0)
        • Git (0)
        • servlet (11)
        • JSP (6)
        • HTML (0)
        • CSS (10)
        • SQL (9)
        • JSTL (3)
        • Mybatis (4)
        • Design Patterns (0)
        • HTTP (2)
        • Devtools (0)
        • IntelliJ (5)
        • JDBC (1)
        • Lombok (3)
        • Logging (1)
      • 책 리뷰 (0)
  • hELLO· Designed By정상우.v4.10.3
함수형 인간
[Spring] IoC / DI 란 무엇일까?
상단으로

티스토리툴바