본문 바로가기
Study/중앙정보처리학원과정

13일차. 다형성(Polymorphism)

by 얏옹이 2022. 11. 10.
반응형

 

 

다형성은 객체지향 프로그래밍에서 상당한 비중을 차지하는 개념이다.

 

우리가 적어도 OOP를 추종하고 있고, OOP의 대표적인 Java를 배우고 있다면, Java 공부중에 가장 중요하다고 손꼽아도

 

될정도로 다형성은 중요한 부분이라고 생각한다. 다만... 저만 그렇겠지만... 상속과 다형성은 너무 이해하기가 어렵고

 

머리에 잘 들어오지도 않는다..... 거두절미 하고 정리를 시작하겠다.

 

 

다형성은 하나의 코드로 여러 자료형을 구현해주고, 실행되는것을 말한다. 쉽게 말하면 하나의 코드로 여러개의 실행 결과가 나온다... 라는 말이다.

 

다형성은 안드로이드, 스프링등 자바 기반의 프레임워크에서 응용할수 있는 OOP의 가장 중요한 개념중에 하나이다.

 

다형성을 잘 활용하면 코드의 간결화, 프로그램 유지보수시 매우 편리하다.

 

아직 저도 배우고 있는 과정이라 집에서 보고 있는 책을 토대로 다형성의 예시를 코드로 작성해봤다.

 

 

조상 클래스인 Animal에 move() 메소드만 멤버로 설정하고

 

나머지 Tiger, Eagle, Human에 각각 Animal 클래스를 상속시켰다.

 

그리고 이어서 Main Method가 있는 클래스에서 moveAnimals라는 메소드를 생성해주고 클래스 타입의 매개변수를 넣어

주었다. Animal 클래스 타입의 animal을 매개변수로 주었는데.

 

이는 즉, 이 메소드를 호출하면서 Tiger, Human, Eagle 어떠한 인스턴스를 매개변수값으로 대입해도

 

Animal 클래스 타입으로 자동 형변환되는것이다. 왜냐? 다들 Animal을 상속받고 있기때문에 Animal의 하위클래스이기 때문이라고 생각한다.

 

즉.. 메소드가 실행될때마다. Animal클래스의 move() 메소드가 호출되는것인데. 여기서 가상 메서드 원리에 따라

 

animal.move()가 실행될때 Animal 클래스의 move() 메소드가 아닌 실제 인스턴스의 메서드가 실행된다.

 

이렇게 코드는 변함이 없지만 어떤 매개변수가 넘어왔느냐에 따라 결과가 달라지는것을 다형성 이라고 한다.

 

 

실행하면 이러한 결과를 얻을수 있다.

 

각각 human, Tiger, Eagle의 move() 클래스가 호출되어 메세지가 출력되었다.

 

 

 

반응형