IoC 로 객체를 호출 하기 (어노테이션 & .xml)
TV 인터페이스를 구현한, SamsungTV 클래스와, LgTV 클래스가 있고, RemoteControl 인터페이스를 구현한, SamsungRC 클래스와, LgRC 클래스가 있다. SamsungTV 는 TV 인터페이스를 구현 했기에, 추상 메서드를 구현 받은 상황 이고, 설계상, channelUp과, volumeDown 은, 리모콘을 통해 기능을 수행 할 수 있다. 그래서, 위와 같이, RemoteControl 인터페이스가 멤버로 (멤버변수) 선언 되어 있다. 이는, 의존 관계가 발생 했다고 한다. 이렇게 의존 관계가 발생 했을 때, 의존 주입을 해야 한다. 기존에, 의존 주입을 하는 방법으로는, 생성자를 통해 객체를 주입 하거나, 또는 setter을 통해 주입 하는 방법 이였다. 생성자를 통해 객체를 ..
2023. 8. 1.
예제 03 ( .xml 파일을 사용하여 객체를 생성 하기 )
Phone 인터페이스를 구현한 GalaxyPhone 클래스에 갤럭시워치 타입의 갤럭시워치를 멤버변수로 추가 해보자. 그리고, 갤럭시폰의 볼륨 조절은 갤럭시워치를 통해서 할 수 있는 설계로 가정해보자. 갤럭시워치 클래스 내부는 아래와 같다. 그러면, 아래와 같이 작성 하게 된다. 그런데, 이것을 컴파일 하게 되면, NPE가 발생 하게 된다. 당연하게도, 저 두 아이를 객체화 해주지 않았기 때문이다. 주체가 galaxyWatch 이고, 주체로 메서드를 호출 하기 때문에, 인스턴스 메서드 이며, 주체를 new 키워드로 인스턴스화 하지 않았기에, null로 메서드를 호출하니, 발생하는 NPE 에러인 것이다. 따라서, 위와 같이 코드를 삽입해주면, 이렇게 해결이 되는 모습을 확인 할 수 있다. 하지만, new 키..
2023. 7. 31.
예제 01 (new 키워드의 높은 결합도)
아래와 같이, 갤럭시폰 클래스가 있다고 가정 해보자. 또한, 아이폰 클래스가 있다고 해보자. 사용자가 만약에, 갤럭시폰을 사고 싶거나 이용하려면 어떻게 해야할까 ? 위와 같이, new 키워드를 사용하여, 객체화를 하고, galaxyPhone 이라는 참조변수를 통해, 원하는 기능을 수행하는 메서드를 호출 하면 된다. 근데 ! 만약에, 사용자가 아이폰도 구매해서 사용 하고 싶으면 어떻게 해야할까 ? 위와 같이, 데이터 타입을 (클래스명) IPhone 으로 변경 하면 가능할까 ? 당연히 아니다. new 키워드 뒤의 코드도 변경해 줘야 한다. (객체화를 할 때, (디폴트) 생성자를 호출 ~) 그래서 아래와 같이, new 키워드 뒤의 코드도 변경해 주었다. 이제 아이폰을 구매 해서 사용 할 수 있을까 ? 구매는 ..
2023. 7. 31.