9월 중순 스프링을 처음 접해 거의 아무것도 모르는 상태일 때 DI와 IOC에 대한 정리를 했었다. 그 때 작성했던 내용에 추가 작성!
Spring Ioc 컨테이너에 의해 관리(생명주기(life Cycle)관리)되는 객체
Bean 설명을 보다가 4주차 강의애서 비슷한 개념 설명을 들은 것 같은 기억이 나서 찾아보았다
내가 실행시키지 않아도 주기적으로 목록을 업네이트 하는 클래스였는데 bean의 개념 설명을 보니 @component
가 떠올랐다!
@component
는 여기 정의한 이 class를 Bean으로 등록해줘! 라는 말과 같다!
위 주석과 같이 스프링이 필요할 때 자동으로 생성하고 실행시키고 중지시키는 클래스 목록, 즉 컨테이너에 넣는 것이고 목록 하나하나가 Bean이 된다!
+ 추가
@Bean
과 @Component
의 차이@Bean
이 붙은 메소드를 만나면 해당 메소드를 실행하고 반환값을 BeanFactory에 Bean으로 등록@Bean(initMethodName="메소드이름")
으로 Bean 이름 변경 가능@Component
를 찾아 Bean으로 등록+ 추가
객체 생성 = 제어의 주체 = 사용자
객체 생성 = 제어의 주체 = 스프링 컨테이너
가 되는 것을 의미한다!개념
장점
쉽게 이해하기라고 9월의 내가 야심차게 써놨는데 지금보니 짠하다... 어떻게든 이해해보려고 하는 노력 칭찬해... 산하야...그때의 노력이 가상해서 기록으로 남길게..
쉬운 이해를 위해 객체간 의존관계를 필름 카메라에 비유했다.
필름 카메라를 예시로 들어보면, 필름카메라는 필름 없이 제 역할을 하지 못하므로
필름카메라는 필름에 의존한다고 할 수 있다.
이 개념을 빌려서 객체간의 의존관계를 설명하자면,
카메라 와 필름 각각을 서로 다른 객체라고 할 수 있고
카메라 객체는 필름 객체에 의존 한다고 할 수 있다.
필름 카메라는 내장형 1회용 필름카메라와 분리형 다회용 필름카메라로 나눌 수 있다.
내장형 필름카메라는 필름과 카메라를 분리하면 제 역할을 하지 못하기 때문에(강하게 결합되어 있기 때문에)
강한 결합이라고 할 수 있으며, 동시에 유연하지 못한 구조라고 할 수 있다.
교체형 필름 카메라는 필름과 카메라를 분리할 수 있기 때문에(약하게 결합되어 있기 때문에)
약한 결합이라고 할 수 있으며, 동시에 유연한 구조라고 할 수 있다.
이를 코드로 구현해보자!
public class Film {
public void film(){
}
public class FilmCamera {
//일회용 필름 카메라
public void disposableFilmCamera(){
//카메라 안에 필름이 내장되어 있어서 강한 결합입니다!
Film film = new Film();
}
public void multiUesFilmCamera(Film film){
//카메라에 필름을 넣어준 것이기 때문에 약한 결합입니다!
//필름을 카메라에 주입시킨 것이기 때문에 의존성 주입!
Film myfilm = film;
}
}
카메라처럼 시각화하면 이렇게 됩니다!