ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] IOC 제어의 역전
    Spring Core 2024. 7. 1. 11:59

     

    제어의 역전 IOC(Inversion of Control)

    • 제어의 역전이라는 의미이고 제어의 흐름을 바꾼다고 한다
    • 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아닌 외부에서 결정 되는 것 이다

     

    코드로 보자

     

    UserSevice

    public interface UserService {
        User findById(Long userId);
    }

     

     

    UserServiceImpl

    public class UserServiceImpl implements UserService {
        private final UserRepository userRepository;
    
        public UserServiceImpl(UserRepository userRepository) {
            this.userRepository = userRepository;
        }
    
        @Override
        public User findById(Long userId) {
            return null;
        }
    }

     

     

    AppConfig

    public class AppConfig {
        public UserService userService() {
            return new UserServiceImpl(userRepository());
        }
    
        public UserRepository userRepository() {
            return new UserRepository();
        }
    }

     

    기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고 연결하고 실행했다
    즉, 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다 

     

    AppConfig가 등장하고 나서 구현 객체는 자신의 로직을 실행하는 역할만 담당한다
    프로그램의 제어 흐름을 AppConfig가 가져간다는 말이다

     

     

     

    프레임워크 vs 라이브러리

     

    개발자는 필요한 부분을 개발해서 부품들을 조립하고 끼워 넣기의 형태로 개발하고 실행한다

    프레임워크에선 개발자는 프레임워크에 필요한 부품을 개발하고 조립하는 방식의 개발을 하게된다

     

    이렇게 조립된 코드의 최종 호출은 개발자에 의해서 제어되는 것이 아닌,

    프레임워크의 내부에서 결정된 대로 이뤄지게 된다 

    이게 제어의 역전이라고 표현한다

     

    • 프레임워크가 코드를 제어하고 대신 실행하면 프레임워크 
    • 하지만 코드를 내가 직접 제어의 흐름을 담당하면 그건 프레이워크가 아닌 라이브러리이다

     

     

    마치며

    대부분 프레임워크에서 IoC를 적용한다. 때문에 스프링을 IoC 컨테이너라고만 해서는 스프링을 정확히 정의할 수 없다

    스프링이 다른 프레임워크와 차별화 하는 기능은 의존성 주입이라는 기능이다

    'Spring Core' 카테고리의 다른 글

    [Spring] 스프링 빈(Bean) 등록 방법  (0) 2024.05.30
    [Spring] 스프링 빈(Bean) 이란?  (0) 2024.05.30
    [Spring] Java Bean? Spring Bean?  (0) 2024.05.28
    SOLID 원칙  (0) 2024.04.30
Designed by Tistory.