본문 바로가기
자바

[JAVA] 객체지향 - 다형성(Polymorphism)

by 책 읽는 개발자_테드 2021. 8. 13.
반응형

다형성(Polymorphism)이란?

단어의 형태소를 분석해보면 poly(많은), morphs(형태)라는 뜻이다.

즉, 형태가 다양하다는 의미다. 

 

위키피디아에서는 다형성을 다음과 같이 정의한다.

 

프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소(상수, 변수, 식 , 오브젝트, 함수 등)들이 다양한 자료형(type)에 속하는 것이 허가되는 성질

 

자바에서 다형성은 대표적으로 두 가지 유형으로 나눌 수 있다.

1. 컴파일 타입 다형성

2. 런타임 타입 다형성

 

컴파일 타입 다형성 - 오버로딩

같은 이름의 메소드를 매개 변수의 개수 또는 타입을 변경하여 여러 개 사용

 

예시코드

class Animal{
	public void move(){
		System.out.println("동물이 움직입니다.");
	}
}
 
class Human extends Animal{
	public void move(){
		System.out.println("사람이 두 발로 뜁니다.");	
	}
}
 
class Tiger extends Animal{
	public void move(){
		System.out.println("호랑이가 네 발로 뜁니다.");	
	}
}
 
class Eagle extends Animal{
	public void move(){
		System.out.println("독수리가 날아갑니다.");
	}
}
 
class AnimalTest
{
	public static void main (String[] args) throws java.lang.Exception
	{
	  Animal human = new Human();
	  Animal tiger = new Tiger();
	  Animal eagle = new Eagle();
 
 	  AnimalTest test = new AnimalTest();
	  test.moveAnimal(human);
	  test.moveAnimal(tiger);
	  test.moveAnimal(eagle);
	}
 
	public void moveAnimal(Animal animal){
		animal.move();
	}
}

결과

 

런타임 타입 다형성 - 오버라이딩

상속받은 부모 클래스의 메소드를 재정의하여 사용

 

public class Computer {
    public void getInfo() {
        System.out.println("컴퓨터입니다.");
    }
}
public class Mac extends Computer{
    @Override
    public void getInfo() {
        System.out.println("맥 컴퓨터입니다.");
    }
}
public class Main {
    public static void main(String[] args){
        Mac myComputer = new Mac();
        myComputer.getInfo();
    }
}

결과

 

다형성을 사용함으로써 갖는 장점은?

- 같은 기능의 자료형만 다른 메서드를 서로 다른 이름으로 기억하지 않아도 된다. (오버로딩)

- 부모 클래스의 정의된 메소드가 자식 클래스에 맞지 않는 경우, 부모 클래스의 메소드를 수정하지 않고 자식 클래스에 특정한 구현을 제공할 수 있다. (오버라이딩)

- 즉, 유지보수에 유리하다.

출처

https://www.geeksforgeeks.org/polymorphism-in-java

패스트캠퍼스 - Java 객체지향 프로그래밍

반응형

댓글