본문 바로가기
JavaScript/Spring

[Spring framework] 스프링 프레임워크 이해하기 3(기본) - 디자인패턴

by Alkaloid 2022. 1. 21.
반응형

저번에는 다형성을 이용하여 결합도를 낮췄습니다.

하지만 작은 문제가 있었죠? 바로 자바 코드를 수정해야한다는 것이었습니다.

자바코드를 수정한다는 것은 개발자의 공수가 들어간다는 것입니다.

 

그럼 이번에는 디자인패턴이라는걸 이용하여 결합도를 낮춰보려고 합니다.

디자인패턴에 대해서는 나중에 싱글톤과 같이 설명해드릴께요. 

spring에 싱글톤이라는 어노테이션이 있기 때문에 같이 설명해드리도록 하겠습니다.

 

어노테이션은 @가 붙는 녀석을 말해요. 특별한 힘을 지닌 애들입니다.

 

본론으로 들어가서

오늘 사용해볼 디자인 패턴은 factory패턴입니다.

클라이언트에서 사용할 객체 생성을 캡슐화 하여 TVUser와 TV사이의 결합도를 느슨하게 해주려해요.

먼저 BeanFactory라는 클래스를 만들어 줬습니다. 

코드를 보시면 getBean이라는 메소드가 매개변수로 받은 beanName에 해당하는 객체를 생성하여 리턴해줍니다.

그럼 매개변수를 어떻게 받을까요?

위와 같이 main코드를 수정해 줍니다.

보시면 방금 만든 BeanFactory클래스를 생성하여 args[0]이라 인자로 전달해줍니다.

(받는건 매개변수[parameter], 보내는건 전달인자[argument])

 

 

수정이 다끝났으면 자신의 프로젝트에서 마우스 우클릭.

Run As -> Run Configurations 

Arguments탭에서 자신이 원하는 TV클래스명을 적어주면 됩니다.

삼성을 실행시키고 싶으면 삼성, Lg를 실행시키고 싶으면 Lg

 

여기서 주의할점은 아까 우리가 beanFactory클래스에서 작성한

beanName.equals("여기 적었던 값") 을 Arguments탭에서 적어주셔야 합니다.

 

그리고 실행 해보면

실행하고자 하는 TV클래스가 나오게 됩니다.

 

이렇게 하면 고객입장에서는 요청만하면 해당 tv를 볼수 있게 됩니다. 코드의 양은 늘었지만, 유지보수를 한다면 아주 좋은 코드가 된것입니다.

 

결론은

TV객체를 생성해 리턴해주는 beanFactory클래스 덕분에 TVUser(클라이언트)에서는 직접 자신이 필요한 객체를 생성하지 않습니다. TVUser(클라이언트)는 어떤 객체가 필요하다는 것을 beanFactory클래스에 요청을 한것이고, beanFactory클래스는  TVUser(클라이언트)가 사용할 tv객체를 생성해 넘겨준것 입니다.

 

반응형

 

반응형