[Spring Boot] Spring IoC 컨테이너 (POJO / 의존성 주입)

근이의 개발일기·2024년 11월 5일

[Spring Boot]

목록 보기
1/4
post-thumbnail

Spring 프레임워크에서 IoC(제어의 역전) 컨테이너POJO(Plain Old Java Object) 기반 개발의 개념, 그리고 IoC 컨테이너의 작동 방식과 의존성 주입에 대해 자세히 설명하겠습니다.

IoC(제어의 역전) 컨테이너

정의:

IoC 컨테이너는 객체의 생성, 관리 및 의존성을 주입하는 역할을 하는 Spring의 핵심 구성 요소입니다. 전통적인 프로그래밍 방식에서는 애플리케이션 코드가 객체를 직접 생성하고 관리하지만, IoC 컨테이너는 객체의 생성과 생명 주기를 관리하여 개발자가 더 높은 수준의 추상화를 제공할 수 있게 합니다.

특징:

  • 객체 관리: IoC 컨테이너는 객체의 생명 주기를 관리하고, 객체 간의 의존성을 해결합니다.
  • 제어 역전: 애플리케이션의 제어 흐름이 개발자에게서 IoC 컨테이너로 전환됩니다.
  • 구성 편의성: XML, Java 어노테이션, 자바 기반 구성 클래스를 통해 객체를 구성하고 주입할 수 있습니다.

POJO(Plain Old Java Object)

정의:

POJO는 특정한 프레임워크에 종속되지 않는 일반적인 자바 객체를 의미합니다. POJO는 간단하고 가벼운 객체로, 데이터와 동작을 캡슐화하며, 복잡한 구조 없이 이해하기 쉽고 유지보수가 용이합니다.

특징:

  • 경량: 복잡한 프레임워크나 규약에 의존하지 않고, 간단하게 생성될 수 있습니다.
  • 유연성: 다른 기술 스택이나 프레임워크와 쉽게 통합될 수 있습니다.
  • 재사용성: POJO를 사용하면 코드 재사용이 용이하고, 다양한 용도로 활용할 수 있습니다.

IoC 컨테이너의 작동 방식

  1. 빈 정의: 애플리케이션에서 필요한 객체(빈)를 정의합니다. 이 정의는 XML 파일이나 Java 어노테이션 또는 자바 기반 설정 클래스에서 이루어집니다.
  2. 객체 생성: IoC 컨테이너는 빈 정의를 기반으로 필요한 객체를 생성합니다. 객체는 일반적으로 POJO로 구현됩니다.
  3. 의존성 주입: IoC 컨테이너는 빈을 생성한 후, 다른 빈의 참조를 주입하여 의존성을 해결합니다.
  4. 객체 관리: IoC 컨테이너는 생성된 객체의 생명 주기를 관리하며, 필요할 때 객체를 반환하거나 파기합니다.

의존성 주입 (Dependency Injection, DI)

정의: 객체들이 어떻게 연결될지를 지정해주는 것

의존성 주입은 IoC의 주요 개념 중 하나로, 객체 간의 의존성을 외부에서 주입하는 방법입니다. 이는 객체가 자신의 의존성을 스스로 관리하지 않고, IoC 컨테이너가 이를 관리하게 함으로써 코드의 결합도를 낮추고 테스트 용이성을 높입니다.

의존성 주입의 방식:

  1. 생성자 주입: 의존성을 생성자의 매개변수로 주입합니다. 객체 생성 시 필수적인 의존성을 주입하여 불변성을 유지할 수 있습니다.

    public class Service {
        private final Repository repository;
    
        public Service(Repository repository) {
            this.repository = repository;
        }
    }
    
  2. 세터 주입: 의존성을 세터 메서드를 통해 주입합니다. 필요에 따라 의존성을 변경할 수 있으며, 선택적인 의존성에 적합합니다.

    public class Service {
        private Repository repository;
    
        public void setRepository(Repository repository) {
            this.repository = repository;
        }
    }
    
  3. 필드 주입: 직접 필드에 주입하는 방식으로, 가장 간단하지만 테스트가 어려운 단점이 있습니다.

    public class Service {
        @Autowired
        private Repository repository;
    }
    

요약

  • IoC 컨테이너는 객체의 생명 주기와 의존성을 관리하여 개발자가 코드의 복잡성을 줄일 수 있도록 도와줍니다.
  • POJO는 복잡한 프레임워크에 의존하지 않고 간단한 구조를 가진 객체로, 유연하고 재사용 가능합니다.
  • 의존성 주입은 객체 간의 의존성을 외부에서 주입하여 결합도를 낮추고 테스트 용이성을 높입니다.

이러한 개념들은 Spring 프레임워크를 사용하여 애플리케이션을 설계하고 구현할 때 매우 유용하게 활용됩니다.

0개의 댓글