아래와 같이, 갤럭시폰 클래스가 있다고 가정 해보자.

또한, 아이폰 클래스가 있다고 해보자.

사용자가 만약에, 갤럭시폰을 사고 싶거나 이용하려면 어떻게 해야할까 ?

위와 같이, new 키워드를 사용하여, 객체화를 하고,
galaxyPhone 이라는 참조변수를 통해,
원하는 기능을 수행하는 메서드를 호출 하면 된다.
근데 ! 만약에, 사용자가 아이폰도 구매해서 사용 하고 싶으면 어떻게 해야할까 ?

위와 같이, 데이터 타입을 (클래스명) IPhone 으로 변경 하면 가능할까 ?
당연히 아니다.
new 키워드 뒤의 코드도 변경해 줘야 한다.
(객체화를 할 때, (디폴트) 생성자를 호출 ~)
그래서 아래와 같이, new 키워드 뒤의 코드도 변경해 주었다.

이제 아이폰을 구매 해서 사용 할 수 있을까 ?
구매는 했지만, 사용을 할 수 없는 모습이다.
왜그럴까 ?
IPhone POJO 클래스 내부에는,
powerOn(), volumeUp(), volumeDown() 이라는 메서드가 없기 때문 이다.
그러면 메서드를 호출 하기 위해, 또 코드를 변경해 주어야 한다.

이제 드디어 에러가 해결된 모습이다.
근데,
에러는 해결됬지만, IPhone 이라는 객체를 가리키는 참조변수명이 어색해 보인다.
가독성을 위해 참조변수명도 적절하게 변경해 주도록 하자.

이제야 조금 마음이 편해졌다.
하지만, 아이폰 하나를 구매 하고 사용 하기 위해서, 정말 많은 코드의 수정이 필요 했다.
[ 정리 ]
new 키워드를 사용해서 객체화 하면, 결합도가 높아진다.
이것을 해결 하기 위해서, 어떻게 해야 할까 ?
바로 다형성의 개념을 활용 할 수 있다.
인터페이스를 작성하고, 인터페이스를 구현 하여 다형성을 실현해보자.

위와 같이, 메서드 바디가 없는 인터페이스를 작성.


그리고, 인터페이스를 구현하게 된 갤럭시폰과 아이폰 클래스 이다.
그러면 이제 아래와 같이,
new 키워드 뒤의 원하는 객체로만 변경해 주면,
쉽게 구매하고 기능을 이용 할 수 있게 된다.


위와 같이 인터페이스의 다형성 개념을 통해 코드의 재작성 빈도수를 낮췄지만,
결국 new 키워드를 사용하는 모습은 변함이 없는 것을 확인 할 수 있다.
new 키워드를 사용 하지 않는 다른 방법은 없을까 ?
바로, Factory 패턴 개념 이다.
이는, SW 개발 디자인 패턴을 사용하여 해결 하는 개념 이며,
대표적인 디자인 패턴은 아래와 같다.
MVC,
Factory,
Singleton,
..
Factory 패턴 이란 ?
객체를 생성하는 코드를 캡슐화 한다.
== new 키워드와 관련된 코드를 은닉 (Hiding)
사용자로부터 필요한 객체의 이름을 받아, 객체 자체를 반환하는 로직을 의미 한다.
코드를 단 한글자도 변경 하지 않아도, 결과가 (화면) 달라진다 !
>> 예제 02 에서 계속
https://hwanii96.tistory.com/300
'Spring 프레임워크 > 예제' 카테고리의 다른 글
예제 06 의존 주입 (Setter Injection) (0) | 2023.08.01 |
---|---|
예제 05 의존 주입 (Contructor Injection) (0) | 2023.08.01 |
예제 04 (.xml 파일 기타 개념) (1) | 2023.07.31 |
예제 03 ( .xml 파일을 사용하여 객체를 생성 하기 ) (1) | 2023.07.31 |
예제 02 [ Factory 패턴 ] (BeanFactory) (0) | 2023.07.31 |