Domain/Spring

[Spring] 제어의 역전(IoC / Inversion of Control)과 의존성 주입(DI / Dependency Injection)

by Donghwan 2021. 7. 14.

제어의 역전(Inversion of Control)과 의존성 주입(Dependency Injection)은 스프링이 가장 기본이 되는 기술이자 스프링의 핵심 개발 원칙이기도 합니다.

의존성 주입(Dependency Injection)

의존성이란 대표적으로 new 키워드를 통해 객체를 참조하거나, 다른 클래스 타입의 리턴값을 가지거나, 클래스의 상속, 인터페이스의 구현이 있습니다. 일반적으로는 의존성에 대한 제어권을 개발자 직접 만들게 됩니다. 하나의 객체가 다른 객체의 의존성을 제공하는 기술을 의존성 주입(Dependency Injection)이라고 합니다.

class User {
    private Champion champion;

    User(Champion champion) {
        this.champion = champion;
    }

    public void attack() {
        champion.attack();
    }
}

interface Champion {
    void attack();
}

class MasterLee implements Champion {
    @Override
    public void attack() {
        System.out.println("MasterLee Attack");
    }
}

class Brand implements Champion {
    @Override
    public void attack() {
        System.out.println("Brand Attack");
    }
}

public class Main {
    public static void main(String[] args) {
        Champion masterLee = new MasterLee();
        Champion brand = new Brand();

        User donghwan;
        donghwan = new User(masterLee);
        donghwan.attack();
        donghwan = new User(brand);
        donghwan.attack();
    }
}

 

제어의 역전(Inversion of Control)

객체의 생성부터 소멸까지 객체의 모든 생명주기를 개발자가 아닌 컨테이너가 담당하는 것을 말합니다.

개발자가 직접 객체를 제어하는 것이 일반적인 경우입니다. 하지만 Spring에서는 스프링 컨테이너에 Bean을 등록하기만 하면, 스프링 컨테이너에서 Bean의 생명주기를 전부 관리해줍니다. 따라서 제어의 주체가 개발자에서 컨테이너로 변경되었다고 볼 수 있고 이것을 제어의 역전이라고 부릅니다. 이러한 동작을 가능하게 해주는 것이 Spring의 IoC Container입니다. IoC Container는 Bean을 관리하기 때문에 개발자가 신경쓰지 않아도 처리를 해주게 됩니다.

 


참고자료

728x90
반응형

댓글