Spring - Ioc 의존성 주입, DI 제어의 역전

김진욱·2022년 2월 17일
0

study

목록 보기
1/6

의존성 주입 (Dependency Injection)

한 객체가 사용하는 의존 객체를 직접 만들지 않고 주입 받아 사용하는 방법

의존성 주입을 받지 않은 경우

public class Toy {
    private Battery battery;

    public Toy() {
        Battery battery = new Battery();
        this.battery = battery;
    }
}

Toy라는 클래스는 Battery 클래스를 강하게 의존하고 있다.

의존성 주입을 받은 경우

<java code>

public class Toy {
    private Battery battery;

    public Toy(Battery battery) {
        this.battery = battery;
    }
}
<spring code>
public class Toy {
    @Autowired
    private Battery battery;
}

@Component
public class Battery {
    ...
}

Toy 클래스는 이제 직접 객체생성을 하지 않고 외부에서 객체를 주입받는다

@RequiredArgsConstructor를 이용한 생성자 주입

// 서비스 클래스
@Service
@RequiredArgsConstructor
public class OrderService {
    private final OrderRepository orderRepository;

    public void doSomething() {
        orderRepository.doSomething();
    }
}

// 레포지토리 클래스
@Repository
public class OrderRepository {

    public void doSomething() {
        System.out.println("this is Repository");
    }
}

// 테스트 클래스
@SpringBootTest
public class DiTest {

    @Autowired
    private OrderService orderService2;

    @Test
    public void test() {
        OrderRepository orderRepository = new OrderRepository();
        OrderService orderService = new OrderService(orderRepository);
        orderService.doSomething();
    }

    @Test
    public void test2() {
        orderService2.doSomething();
    }
}



결과



제어의 역전 (Inversion of Control)

모든 제어 권한은 자신이 아닌 다른 대상(Spring)에게 위임하는 것이다.

객체는 자신이 사용 할 객체를 스스로 생성하지 않으며, 그것이 어디서 만들어 지는지 알 수 없다. 모든 제어 권한은 자신이 아닌 다른 대상에게 위임하여 객체 간의 결합도를 낮추며 코드의 유연성을 높힌다

profile
2021.12~ 공부의 기록

0개의 댓글