728x90

들어가면서

IoC(Inversion of Control, 제어의 역전)는 객체 지향 프로그래밍에서 객체 생성과 의존성 관리 등을 개발자가 직접 제어하는 것이 아니라 프레임워크나 컨테이너가 제어하는 것을 말합니다.

Spring 프레임워크에서의 IoC는 객체의 생성과 소멸, 의존성 주입 등을 Spring 컨테이너가 제어하도록 합니다. 이를 통해 객체간의 결합도를 낮출 수 있고, 유연하고 확장 가능한 코드를 작성할 수 있습니다.

IoC종류 뭐가 있을까?

Spring Framework에서는 다음과 같은 종류의 IOC(Inversion of Control) 컨테이너가 있습니다.

  1. BeanFactory
  1. ApplicationContext
  1. WebApplicationContext
  • BeanFactory는 가장 기본적인 IOC 컨테이너로서, Bean 객체의 생성, 관리, 제공에 대한 기능을 제공합니다.
  • ApplicationContext는 BeanFactory를 상속받아 기능을 보완한 것으로서, AOP, 메시지 처리 등 다양한 기능을 지원합니다.
  • WebApplicationContext는 웹 어플리케이션에서 사용하는 IOC 컨테이너로서, HTTP 요청에 대한 처리와 관련된 Bean 객체를 관리합니다.

여러가지 설정방법

Spring Framework에서는 다양한 환경에서 사용할 수 있는 다양한 IOC 컨테이너를 제공합니다. 예를 들어, XML, 어노테이션, 자바 설정 파일 등을 이용해서 Bean 객체를 등록하고 관리하는 방법을 지원합니다. 이러한 다양한 방법을 통해 유연하게 IOC 컨테이너를 사용할 수 있습니다.

아래는 Spring IoC를 사용한 간단한 코드입니다.

public interface UserService {
    void addUser(User user);
}

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void addUser(User user) {
        userDao.addUser(user);
    }
}

public interface UserDao {
    void addUser(User user);
}

public class UserDaoImpl implements UserDao {
    public void addUser(User user) {
        // user를 DB에 저장하는 코드
    }
}

위 코드에서 UserServiceImpl 클래스는 UserDao 클래스에 의존하고 있습니다. 하지만 IoC를 사용하면 UserDao 클래스를 생성하고 UserServiceImpl 객체에 주입하는 작업을 Spring 컨테이너가 대신합니다.

<bean id="userDao" class="com.example.UserDaoImpl" />
<bean id="userService" class="com.example.UserServiceImpl">
    <property name="userDao" ref="userDao" />
</bean>

위 XML 설정 파일에서 UserDaoImpl 클래스를 userDao 빈으로 등록하고, UserServiceImpl 클래스를 userService 빈으로 등록하면 Spring 컨테이너는 userDao 빈을 생성한 후에 userService 빈을 생성하면서 userDao 빈을 주입합니다.

어떤 장단은 뭐가 있을까?

IoC를 사용하면 객체 생성과 의존성 관리를 Spring 프레임워크가 대신 처리하기 때문에 개발자는 객체 생성과 관련된 코드를 작성하지 않아도 되고, 객체간의 결합도가 낮아져 유연하고 확장 가능한 코드를 작성할 수 있습니다.

Spring 프레임워크에서 IoC는 DI(Dependency Injection, 의존성 주입)라는 방식으로 구현됩니다. DI는 객체간의 의존성을 외부에서 주입하는 방식으로, 객체간의 결합도를 낮출 수 있습니다. Spring 컨테이너는 DI를 사용하여 객체를 생성하고 의존성을 주입합니다.

따라서, Spring 프레임워크에서 IoC를 사용하면 유연하고 확장 가능한 코드를 작성할 수 있으며, 객체간의 결합도를 낮출 수 있습니다.


내저장소 바로가기 luxury515

'Springboot3.0 > 핵심기능' 카테고리의 다른 글

Spring AOP에 관련하여.  (0) 2023.04.15
Spring의 핵심요소  (0) 2023.04.15
Spring Security 와 Siro 에 대한 비교  (0) 2023.04.15
Redis를 이용한 refresh token  (0) 2023.04.11
Redis를 이용한 중복요청 방지  (0) 2023.04.11

+ Recent posts