아주 기본적인 구조로 램프와 스위치를 구현했음
램프는 on off 기능을 가지고 있고 스위치는 그것을 껏다켰다 해주는 오브젝트들임
스위치는 램프 오브젝트가 필요하므로 이를 의존한다라고 표현함.
근데 나중에 램프말고 차 전조등을 껏다켰다 하는 기능을 넣고 싶어졌는데
Switch 안에 이미 Lamp를 사용하고 있기 때문에 새로운 SwitchHeadLight 클래스를 만들어줘야함
근데 보면 알겠지만 코드에 중복되는 부분이 굉장히 많음. 이러한 구조는 맘에 들지가 않음
그래서 스위치로 껏다킬 수 있는 인터페이스를 만들어서 Lamp를 구현했음
스위치는 이제 램프나 헤드라이트가 아닌 ISwitchButton 인터페이스를 의존하게 됐음
근데 문제는 아직도 헤드라이트 스위치를 쓰고싶으면 새로운 Switch 클래스를 만들어야함.
이걸 해결하기 위해서 button 을 외부에서 "주입" 당하는 구조를 만듦, 즉 의존성 주입
이제 스위치는 ISwitchButton 인터페이스만 따르게 된다면 게속 돌려쓸 수 있는 "컴포넌트"가 되었음.
여기까지가 의존성 주입이 왜 필요한지의 내용임
근데 실제로 Switch 클래스를 사용하려고 해보니까
우리가 직접 Lamp 를 생성시켜서 넣어줘야 하게 됐음
Switch 는 램프가 들어올 지 헤드라이트가 들어올 지 몰라도 되는 코드를 짰는데 알 필요 없는 우리가 알아야 하게 됐음
또 넣어줘야할게 많아질수록 코드가 더러워지기 시작함.
여기서 나온 해결책이 제어의 역전이란 방법임.
객체를 생성하고 삭제해주는 애를 만들어서 알아서 관리하게 만들도록 하게 함.
우리가 오브젝트를 제어하는게 아니라 위임을 시켰기 때문에 제어의 역전이라고 말함
여기까지 공부했고 자세한 구현 방법은 오늘 퇴근하고 더 자세히 공부...
출처: https://develogs.tistory.com/19
댓글 0