자바의 인터페이스에 대해서 충분히 알았다면, 이제 다형성에 대해서 배울 차례입니다. 이미 배운 것들만 해도 충분히 가치있습니다. 그런데, 이왕 배운김에 조금 더 배우면 가치있는 것이 있습니다. 바로 다형성, 영어로는 polymorphism이라고 하는 것입니다. 하나의 클래스가 여러가지의 얼굴을 갖게 하는 것이 다형성이라고 하는 것인데요. 코드를 보면서 이해해 보도록 합시다.
우리는 RealCal 이라는 클래스가 Calculable, Printable 두 가지의 interface를 갖는 것을 구현했습니다. 그리고 c 변수에 RealCal 데이터타입을 적용하여 RealCal의 인스턴스를 만들었는데요. 놀랍게도 RealCal의 인스턴스를 만들 때 RealCal 데이터 타입이 아니라 우리가 적용했던 interface를 데이터 타입으로 가질 수 있습니다. 위의 코드에서 b 변수와 같이 말이죠. b 변수는 Calculable 데이터 타입으로 PI 변수와 sum 메서드를 가지고 있습니다. 그래서 Printable interface에 있는 print 메서드를 사용할 수는 없습니다. 반대로 b 변수를 Printable 데이터 타입으로 바꾸면, Printable 처럼 동작하면서 print 메서드는 작동하는데, PI 변수와 sum 메서드는 작동하지 않게 됩니다.
그럼 중요한 것은 이것이 왜 필요한가입니다. 비유를 한번 들어보겠습니다.
첫 번째, 여러분이 가전제품을 하나 구매했는데, 기능이 100가지가 있다라고 한다면 어떤가요? 상당히 난해할 겁니다. 기능이 많은 것은 자유도가 있다는 것을 의미하지만 반대로 배워야만 하는 것들이 엄청 많다는 것을 의미하기도 합니다. 그래서 우리는 나한테 필요한 기능만 보여줬으면 좋겠다고 생각하는 겁니다. 마찬가지로, RealCal 이라는 클래스가 지금 메서드가 2가지밖에 없지만 만약에 1,000가지가 있었다고 생각해 보세요. 그러면 RealCal 이라는 클래스가 너무 복잡할 겁니다. 배워야 할 것이 너무 많은 겁니다. 그때 우리가 interface 데이터 타입의 변수를 RealCal 인스턴스로 만들어서 복잡한 RealCal 클래스를 1나의 interface만 담고 있는 비교적 간단한 형태 내가 원하는 기능만 남고 나머지는 감춘 형태로 사용할 수 있게 됩니다.
RealCal 이라는 클래스를 우리가 원하는 형태의 최소화된 형태로 배워서 사용할 수 있게 된다는 것입니다.
또 이런 경우도 있습니다.
두 번째, Printable 이라는 기능만 이용하겠다고 지정을 하게 되면, 위와 같이 RealCal 보다 더 적은 기능을 가지고 있는 클래스를 만들 수도 있습니다. 그리고 해당 클래스를 Printable 데이터 형식의 변수에 인스턴스로 만들 수 있습니다. 무슨 말이냐면, 똑같은 인터페이스를 구현하고 있는 클래스라면 누구든지 인스턴스를 만들 수 있게 되는 호환성이 생긴다는 겁니다. 즉, 호환성을 보장할 수 있다는 겁니다.
바로 이것이 우리가 변수 앞에다가 인스턴스를 지정하는 이유이고 변수 앞에 다양한 데이터타입을 주게 되면서 다양한 얼굴을 갖게 되는 것을 우리는 "다형성" "polymorphism" 이라고 합니다.
어려운 내용을 배워보았습니다.
출처 : https://opentutorials.org/module/4872
'[생활코딩] Server > JAVA Interface(인터페이스)' 카테고리의 다른 글
Java Interface - 4 수업을 마치며 (0) | 2023.05.08 |
---|---|
Java Interface - 1 기본형식 (0) | 2023.05.08 |
JAVA Interface - 0 수업소개 (0) | 2023.05.06 |