Java/JAVA 2 - 객체지향 핵심

JAVA 2 - 다형성(Polymorphism)

CNOW 2024. 4. 24. 15:04
💡 학습 목표
  1. 다형성에 대한 개념을 이해하자.
  2. 업캐스팅과 다운캐스팅이란?
  3. 다형성에 활용

 

1. 다형성에 대한 개념을 이해하자.

다형성은 하나의 데이터 타입이 다양한 형태로 바라볼 수 있는 것

다형성(Polymorphism)은 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 이는 한 요소(예: 메서드, 클래스)가 여러 형태를 가질 수 있는 능력을 의미합니다. 다형성은 코드의 유연성과 재사용성을 높여주며, 상속, 추상화, 인터페이스와 함께 사용됩니다.

 

시나리오 코드 1 

 

package basic.ch20;

public class Animal {
	
	public void move () {
		System.out.println("동물이 움직입니다.");
	}
	
	public void eating() {
		System.out.println("먹이를 먹습니다.");
	}
	
}	// end of class

 

package basic.ch20;

public class Human extends Animal {
	// 하나의 클래스를 휴먼으로도 동물로도 볼 수 잇는 다형성이 형성되었다.
	
	
	@Override
	public void move() {
		System.out.println("사람이 두발로 걷습니다.");
	}
	
	@Override
	public void eating() {
		System.out.println("밥을 먹습니다.");
	}
	
	public void readBooks() {
		System.out.println("책을 읽습니다.");
	}
	

} // end of class

 

package basic.ch20;

public class Tiger extends Animal {
	
	@Override
	public void move() {
		System.out.println("호랑이가 네발로 걸어요");
	}
	
	@Override
	public void eating() {
		System.out.println("호랑이가 사냥을 합니다.");
	}
	
}
package basic.ch20;

public class AnimalTset {
	
	public static void main(String[] args) {
		
		Animal animal = new Animal();
		animal.move();
		animal.eating();
		System.out.println("----------");
		
		// 타이거는 애니멀이라는 데이터 타입으로 바라볼수 있다.
		Animal 주소2 = new Tiger();
		주소2.move();
		주소2.eating();
		System.out.println("----------");
		
		Animal 주소3 = new Human();
		주소3.move();
		주소3.eating();
		// 컴파일러는 애니멀이라는 데이터 타입만 알기 때문에 readBooks는 오류가 발생한다.
		// 주소3.readBooks();
		
		// 그렇다면 어떻게 해야 쓸 수 있을까?
		// 명시적 형변환과 비슷
		//int n1 = (int)10.5;
		// 다운 캐스팅
		((Human)주소3).readBooks();
		System.out.println("--------------");
		
	} // end of main
	
} // end of class

 

2. 업캐스팅과 다운캐스팅이란?

업캐스팅(Upcasting)과 다운캐스팅(Downcasting)은 객체 지향 프로그래밍에서 다형성을 활용할 때 사용되는 개념입니다.

 

업캐스팅(Upcasting)

  • 업캐스팅은 부모 클래스의 참조 변수로 자식 클래스의 객체를 참조하는 것을 말합니다.
  • 부모 클래스의 데이터 타입으로 자식 클래스의 객체를 대입하는 것을 의미합니다.
  • 업캐스팅은 자동으로 이루어집니다.
Animal animal = new Dog(); // 업캐스팅

 

 

다운캐스팅(Downcasting)

  • 다운캐스팅은 부모 클래스의 참조 변수를 자식 클래스의 객체로 변환하는 것을 말합니다.
  • 다운캐스팅은 명시적으로 형변환을 해야 합니다.
  • 다운캐스팅은 업캐스팅된 객체가 실제로 자식 클래스의 객체일 때만 가능합니다. 그렇지 않으면 ClassCastException(예외) 이 발생할 수 있습니다.
Animal animal = new Dog(); // 업캐스팅
Dog dog = (Dog) animal; // 다운캐스팅