본문 바로가기
Programming/Spring

스프링(Spring) 프레임워크 기초: DI (Dependency Injection)

by vita12321 2023. 7. 26.
728x90
반응형

스프링(Spring) 프레임워크는 객체지향 프로그래밍의 원칙을 고수하면서 자바 기반 애플리케이션 개발을 용이하게 하는 오픈 소스 플랫폼입니다. 글에서는 스프링 프레임워크의 핵심 기능 하나인 의존성 주입(Dependency Injection, DI) 대해 설명하겠습니다.

 

 

1. 의존성 주입(Dependency Injection, DI) 이란?

    의존성 주입은 객체 간의 결합도를 낮추고 유연한 코드를 작성할 있도록 객체 사이의 의존 관계를 프레임워크나 컨테이너가 대신 관리하는 기법입니다. DI 통해 객체는 직접 의존 객체를 생성하지 않고 외부에서 생성된 객체를 주입받게 됩니다.

 

 


2. 스프링 프레임워크에서 의존성 주입의 방법

    스프링 프레임워크에서는 주로 다음 가지 방법으로 의존성 주입이 이루어집니다.

 

  • 생성자 주입(Constructor Injection)

    생성자 주입은 객체를 생성할 때 생성자를 통해 의존성을 주입하는 방식입니다. 생성자 주입의 장점은 객체가 불변성(Immutable)을 가질 수 있고, 생성 시점에 모든 주입이 완료되어 안정성이 보장됩니다.
        public class CustomerService {

            private final CustomerRepository repository;

 

            public CustomerService(CustomerRepository repository) {

                this.repository = repository;

            }

        }

 

  • 세터 주입(Setter Injection)

    세터 주입은 객체의 세터 메소드를 통해 의존성을 주입하는 방식입니다. 세터 주입의 장점은 선택적인 의존성(Optional dependencies)을 사용할 수 있고, 객체를 생성한 후에 의존성을 변경할 수 있다는 점입니다.
        public class CustomerService {

            private CustomerRepository repository;

 

            public void setRepository(CustomerRepository repository) {

                this.repository = repository;

            }

        }

 

  • 필드 주입(Field Injection)

    필드 주입은 객체의 필드에 직접 의존성을 주입하는 방식입니다. 필드 주입의 장점은 코드가 간결해진다는 점이지만, 주입된 객체의 변경이 불가능하다는 단점이 있습니다.
        public class CustomerService {

            @Autowired

            private CustomerRepository repository;

        }

 


3. 의존성 주입 패턴과 전략 패턴(Strategy Pattern)의 관계

전략 패턴은 객체의 행동(알고리즘)을 캡슐화하여 동적으로 행동을 교체할 수 있다는 원칙을 따릅니다. 의존성 주입은 전략 패턴의 개념을 예시로 들 수 있는데, 서로 다른 구현이 필요한 경우 의존성 주입을 통해 유연하게 변경할 수 있습니다.

 


4. 스프링 프레임워크와 의존성 주입의 이점

스프링 프레임워크에서 의존성 주입을 사용함으로써 코드 재사용성, 모듈 간의 결합도 감소 다양한 이점을 얻을 있습니다.

 

  • 높은 수준의 추상화와 모듈 간의 낮은 결합도로 인해 코드 유지 관리 및 테스트가 용이해집니다.
  • 객체 생성과 의존 관계 관리를 프레임워크가 대신 해주기 때문에 개발자는 비즈니스 로직에만 집중할 수 있습니다.
  • 코드의 변경사항이 다른 부분에 미치는 영향을 최소화하면서 쉽게 기능을 확장하거나 수정할 수 있습니다.

 

 

 

스프링 프레임워크에서의 의존성 주입은 객체지향 프로그래밍의 원칙과 일치하며, 이를 활용하여 코드의 유지 보수와 확장성을 높여줍니다.

728x90
반응형