사용할 객체를 직접 생성하지 않고, 객체의 생명주기를 외부에 위임
여기서 외부는 스프링 컨테이너 또는 IoC컨테이너
즉 객체를 관리하는게 컨테이너고 제어권이 넘어간 것을 제어 역전이라고 부른다.
이 제어역전을 기반으로 의존성주입(DI) 또는 관전지향 프로그래밍(AOP) 등이 가능
프로그래머는 비즈니스로직에만 집중하도록 함
제어역전의 방법 중 하나, 사용할 객체를 직접 생성이 아닌
외부 컨테이너가 생성한 객체를 주입 받아 사용하는 방식
생성자를 통한 의존성 주입
필드 객체 선언을 통한 의존성 주입
setter 메서드를 통한 의존성 주입
기능을 구현할 때 핵심 기능을 '핵심 기능'과 '부과 기능'으로 구분하고
각각을 하나의 관점으로 보는 것을 의미
핵심기능
비즈니스 로직을 구현하는 과정에서 비즈니스 로직이 처리하려는 목적 기능
부과기능
로깅, 트랜잭션 등 어떤 기능인지 무관하게 로직이 수행되기 전, 후에 수행되는 기능
여러 비즈니스 로직에 반복되는 기능을 하나의 공통 로직으로 처리하도록 모듈화해
삽입하는 방식을 AOP 라고 함
컴파일 과정에 삽입
바이트코드를 메모리에 로드하는 과정에 삽입
프록시 패턴을 이용한 방식