본문 바로가기
JavaScript/Spring

[Spring framework] 스프링 프레임워크 이해하기 2(기본) - 다형성

by Alkaloid 2022. 1. 20.
반응형

아직은 제대로 된 spring강의가 아닙니다. spring을 이해하기위한 기본적인 단계라고 생각하시면 됩니다.

 

지난번 결합도가 높은 코드를 작성해 보았습니다.

new 키워드를 사용하여 객체를 생성하고, 해당 클래스의 메소드를 호출하였습니다.

하지만 그렇게 사용하니 다른클래스로 교체하기 위해서는 객체 생성과 호출 모두 바꿔야 했어야 했죠.

 

오늘 해볼것은 다형성을 이용하여 결합도를 낮춰보려 합니다.

다형성을 이요하려면 1. 상속 2. 재정의 두가지를 해줘야해요.

 

그럼 다시 코드로 설명을 하겠습니다. 

이전 작성하였던 코드는 지우시던지, 주석하시면 될거 같아요.

 

그럼 가장 먼저 상속을 위한 인터페이스를 만들어 보겠습니다.

이건 TV라는 인터페이스예요! 

인터페이스를 만드는 방법은 클래스 만드는것과 비슷해요. 

우린 클래스를 만드려고 class라는걸 클릭하였지만 인터페이스는 interface라는걸 클릭해주면 됩니다.

 

인터페이스를 만들어 줬으니 해당 인터페이스를 바라보도록 해야겠죠? 즉, 상속을 하겠습니다.

SamsungTV클래스는 크게 변한 부분은 없어요! 

맨위라인 SamsungTV(){  에서 SamsungTV implements TV(){  로 바뀐 것 입니다.

그럼 삼성클래스를 상속해줬으니 LgTV도 상속을 하고, TV인터페이스에서 메소드를 정의해줬으니 재정의 작업을 하겠습니다.

LgTV또한 맨위가  implements TV가 붙었죠? 

그리고 클래스 내부를 보시면 메소드 명도 바뀌었습니다! (turnOn -> powerOn)

4개 메소드 전부가 바뀌었어요!

 

삼성클래스는 상속만, 엘지클래스는 상속과 재정의를 해줬습니다.

그럼 마지막으로 main을 볼께요!

main은 편의를 위해 public static void main(String[] args)는 생략했습니다.

그 내부에 바로 위의 코드가 들어가요!

 

저런식으로 작성을 하게 되면 Samsung에서 LG로, LG에서 Samsung으로 교체할때 

TV tv =new SamsungTV();  이부분만 바꿔주면 됩니다.

 

이해가 안되시는분들이 계실수 있으니 예를 들어드릴께요!

SamsungTV을 출력하고 싶다.  -> TV tv =new SamsungTV();

LgTV를 출력하고 싶다. -> TV tv =new LgTV();

나머지는 바꿀 필요없이 이부분만 바꿔주면 됩니다.

 

이렇게 하니 변경이 되게 쉽죠?

처음할때는 "기존에는 파일 3개고, 지금은 파일이 4개다. 그리고 처음부터 저번에 했을때 처럼 짜면되지, 이건 수정을 해야하는거 아닌가?"

 

라는 생각이 드실수도 있어요! 하지만 이러한 코드 작성의 장점은 유지보수에 있습니다.

한번 개발하고 아예 손대지 않거나 고칠 필요가 없으면 상관이 없어요. 하지만 프로그램이란 고장이 날수도 있고, 다양한 버그가 발생할 수도 있습니다. 그럴때 유지보수에 많은 시간과 인력이 들어가게 되어 이러한 방식을 사용하는겁니다.

 

아직도 이해가 안되실수 있습니다.

전에 했던 작업은

A라는 사람이 SamsungTV를 보다 고장이 났습니다. 그래서 사용을 못하는동안 LgTV를 쓰게 해주려해요.

하지만 SamsungTV를 보려면 무조건 Samsung셋탑과 티비, 전용선이 필요해요. Lg도 마찬가지구요.

이때 직접 방문하여 samsungTv를 떼고, 선도 다 제거하고 LgTv로 교체하고, 선도 교체하였습니다. 

수리가 다끝나고 다시 집에 설치되어있던 LgTv를 제거하고 관련 선을 빼고, 다시 SamsungTV를 설치하고 선도 설치했습니다.

너무 번거롭지 않나요?

하지만 오늘 설명드린 방법은 samsung에서 나온 셋탑박스를 Lg셋탑박스로 교체하여 어떤 티비를 쓰던 티비를 쓸수 있게 했던 방법입니다.

 

 

그럼 정리하겠습니다. 오늘 했던 작업을 개발자스럽게 말을 해보면.

"tv클래스들(SamsungTV, LgTV)의 최상위 부모로 사용할 tv인터페이스를 추가하고 모든 tv(SamsungTV, LgTV)가 공통적으로 가져야할 메소드를 추상 메소드로 선언 해보자."

위의 말이 오늘 했던 작업입니다.

반응형

 

반응형