[JAVA] 다형성(Polymorphism)

JAVA 다형성(Polymorphism)

다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 즉 다형성이란 동일한 조작방법으로 동작시키지만 동작방법은 다른것을 의미한다.


overloading과 다형성

다형성의 쉬운 예로 오버로딩이 있다.  오버로딩은 같은 의미이지만 매개변수가 어떤 형태이고 어떤데이터 타입이냐에 따라서 다른 메서드가 호출되는 방식이다. 즉 같은 이름, 다른 동작방법이라고 볼 수 있기때문에 이것또한 다형성이다.




클래스와 다형성

아래의 코드를 보면 c1과 c2의 인스턴스 데이터타입이 상속받은 부모 클래스인것을 볼 수 있다. 
이렇게 작성한 이유는 코드의 중복을 회피하면서도 각각의 인스턴스마다 서로 다른 원하는 결과값을 얻기 위해서이다.

각 인스턴스는 상속받은 상위클래스를 데이터타입으로 정의함으로서 

상위클래스에 정의되어있는 setOprands메서드로 인자값을 전달하여 left와 rigth의 값을 초기화하고 
각 인스턴스마다 선언된 다른 클래스 즉 각각의 상속받은 하위클래스를 호출하여 서로 다른 원하는 결과값을 출력하도록한다. 

상위클래스에서 run메서드로 추상메서드를 호출하고 이렇게 호출된 추상메서드는 상위클래스를 상속받은  각각의 하위클래스에서 오버라이딩을 통해 추상메서드를 구현하여 서로 다른 원하는 결과 값을 출력할 수 있다.




이렇게 작성하는것이 제일 간단하지만 각각의 인스턴스마다 다른 데이터타입을 가지고 있다하더라도  excute메서드에 각각의 데이터타입으로 매개변수를 작성하여 인스턴스의 각각의 데이터를 전달해도 결과값을 동일하게 얻을 수 있다. 하지만 그렇게되면 코드의 중복이 발생하므로 위와같이 작성하는것이 좋을것같다.


인터페이스의 다형성

한 클래스가 여러개의 인터페이스를 상속받는다는것은 상속받은 클래스에서 인터페이스가 구현하는 기능을 모두 사용할 수 있다는것이다.
하지만 모든 기능을 사용하지않고 인터페이스로 구현된 기능중 어떠한 특정 기능만 사용하고자한다면 혹은 해당 기능만 사용하도록 제한하고자 한다면 인터페이스를 데이터타입으로 지정해주면 된다.

인터페이스 또한 클래스와 같이 데이터타입으로 지정할수있다. 인터페이스를 데이터 타입으로 작성하면 해당 인터페이스에 의해 정의된 특정 기능만을 사용하도록 강제하거나 사용할 수 있다.


또한 하나의 인터페이스를 상속받는 여러개의 클래스는 하나의 공통된 인터페이스 데이터타입으로 정의해서 각각의 클래스마다 다르게 동작하는 다형성을 구현할 수 있다.












댓글