# IoC (Inversion of Control) 제어의 역행
스프링의 IoC (Inversion of Control)는 객체 간의 의존성을 관리하기 위한 디자인 패턴입니다. 이 패턴은 개발자가 객체를 생성하고 관리하는 것이 아니라, 프레임워크가 객체의 생성과 관리를 대신 맡아서 처리합니다. 이를 통해 객체 간의 결합도를 낮출 수 있고, 유연하고 확장 가능한 애플리케이션을 구축할 수 있습니다.
일반적으로 개발자는 객체를 생성하기 위해 `new` 키워드를 사용하고, 객체 간의 의존성을 직접 관리합니다. 그러나 스프링에서는 IoC 컨테이너라는 역할을 하는 컨테이너가 객체의 생명주기를 관리하고, 객체 간의 의존성을 자동으로 해결해줍니다.
스프링 IoC의 핵심은 빈(Bean)입니다. 빈은 스프링이 관리하는 객체를 의미하며, 일반적으로 애플리케이션에서 사용되는 클래스들이 빈으로 등록됩니다. 빈은 스프링 컨테이너에서 생성되고 초기화되며, 필요한 곳에서 주입(Dependency Injection)을 통해 사용됩니다.
주입 방법에는 생성자 주입(Constructor Injection), 세터 주입(Setter Injection), 필드 주입(Field Injection) 등이 있습니다. 주입을 통해 객체 간의 의존성을 명시하고, 컨테이너가 이를 자동으로 해결합니다. 이를 통해 개발자는 객체 간의 의존성 관리에 대한 부담을 줄일 수 있습니다.
또한, 스프링 IoC는 다양한 기능을 제공합니다. 예를 들어, 빈의 스코프(scope)를 설정하여 객체의 생명주기를 관리하거나, 빈의 프로퍼티 값을 외부 설정 파일에서 읽어올 수 있습니다. 이를 통해 애플리케이션의 유연성과 관리 편의성을 높일 수 있습니다.
요약하자면, 스프링의 IoC는 객체 간의 의존성을 관리하는 패턴으로, 스프링 컨테이너가 객체의 생성과 관리를 담당합니다. 이를 통해 개발자는 객체 간의 의존성을 직접 처리하지 않고, 유연하고 확장 가능한 애플리케이션을 개발할 수 있습니다.
# 의존성 주입(Dependency Injection)
스프링의 의존성 주입(Dependency Injection)은 객체 간의 의존 관계를 스프링이 자동으로 해결해주는 기능입니다. 의존성 주입을 통해 개발자는 객체를 생성하거나 의존하는 객체를 직접 관리하는 대신, 스프링 컨테이너가 이를 대신 처리합니다.
간단히 말하면, 의존성 주입은 객체가 다른 객체를 사용하는 경우에 해당 객체를 외부에서 주입(제공) 받는 것을 의미합니다. 이를 통해 객체 간의 결합도를 낮추고, 유연하고 재사용 가능한 코드를 작성할 수 있습니다.
스프링에서는 주입 방법으로 생성자 주입(Constructor Injection), 세터 주입(Setter Injection), 필드 주입(Field Injection)을 제공합니다.
1. 생성자 주입(Constructor Injection): 객체를 생성할 때 생성자를 통해 의존하는 객체를 주입합니다. 주입받을 의존 객체를 매개변수로 받는 생성자를 정의하고, 스프링 컨테이너가 이를 자동으로 호출하여 의존 객체를 주입합니다.
2. 세터 주입(Setter Injection): 의존하는 객체를 설정하기 위해 세터 메서드를 사용합니다. 객체의 세터 메서드에 의존 객체를 매개변수로 받고, 스프링 컨테이너가 이를 호출하여 의존 객체를 주입합니다.
3. 필드 주입(Field Injection): 필드 레벨에서 의존 객체를 주입합니다. 의존하는 객체를 필드로 선언하고, 스프링 컨테이너가 해당 필드에 직접 값을 할당하여 주입합니다. 이 방법은 주로 `@Autowired` 어노테이션을 사용하여 주입을 표시합니다.
의존성 주입을 사용하려면, 해당 객체를 스프링 빈(Bean)으로 등록해야 합니다. 스프링 컨테이너는 이러한 빈들을 관리하고, 객체 간의 의존성을 해결하며 필요한 시점에 주입합니다.
이렇게 스프링의 의존성 주입 기능을 활용하면, 객체 간의 결합도를 낮출 수 있고, 유연하고 테스트 가능한 코드를 작성할 수 있습니다. 또한, 스프링의 IoC 컨테이너를 통해 의존성 주입을 자동으로 처리하므로, 개발자는 객체 생성과 의존성 관리에 대한 부담을 줄일 수 있습니다.
'Programming > 스프링(spring) - Enterprise' 카테고리의 다른 글
9. 스프링(spring)/ JUnit test (0) | 2023.07.18 |
---|---|
10. 스프링(spring)/ VO클래스와 DAO클래스 (0) | 2023.07.17 |
5. 스프링(spring)/ 버전 호환 설치 및 설정(2023.기준) (0) | 2023.07.17 |
4. 스프링(spring)/ AOP(aspect oriented programming, 관전 지향 프로그래밍) (0) | 2023.07.11 |
3. 스프링(spring)/ 어노테이션(annotation) (0) | 2023.07.11 |