학습 목표
1. 다형성에 대한 개념을 이해하자.
2. 업캐스팅과 다운캐스팅이란?
3. 다형성에 활용
1. 다형성에 대한 개념을 이해하자.
다형성은 하나의 데이터 타입이 다양한 형태로 바라볼 수 있는 것
다형성(Polymorphism)은 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 이는 한 요소(예: 메서드, 클래스)가 여러 형태를 가질 수 있는 능력을 의미합니다. 다형성은 코드의 유연성과 재사용성을 높여주며, 상속, 추상화, 인터페이스와 함께 사용됩니다.
package com.polymorphism;
public class Animal {
public void move() {
System.out.println("동물이 움직입니다.");
}
public void eatting() {
System.out.println("먹이를 먹습니다.");
}
}// end of class
//상소관계로 설정- 다형성
class Human extends Animal {
@Override
public void move() {
System.out.println("사람이 두 발로 걷습니다.");
}
@Override
public void eatting() {
System.out.println("밥을 먹습니다.");
}
public void readBooks() {
System.out.println("책을 읽습니다.");
}
} //end of class
class Tiger extends Animal {
@Override
public void move() {
System.out.println("호랑이가 네 발로 걸어요.");
}
public void hunting() {
System.out.println("호랑이가 사냥을 합니다.");
}
}
package com.polymorphism;
/**
* 하나의 데이터 타입을 다양한 형태로 바로 보는 것(다형성)
* 상세히...한 요소 : 메서드(클래스)가 여러 형태를 가질 수 있는 능력을 의미
* 상속관계....다형성을 살펴보고있다.
*/
public class AnimalTest {
public static void main(String[] args) {
Animal animal1 = new Animal();
animal1.move();;
animal1.eatting();
System.out.println("--------------");
//다형성의 장점 부모 타입으로 자식 클래스를 인스터스화 할 수 있다.
Animal animal2 = new Tiger();
animal2.move();
animal2.eatting();
//코드를 작성하는 시점 ----> 컴파일 시점
//프로그램을 실행하는 시점은 ----> 런파일 시점
System.out.println("-------------------");
Animal animal3 = new Human();
animal3.move();
animal3.eatting();
}// end of main
}//end of class
package com.polymorphism;
public class AnimalTest2 {
public static void main(String[] args) {
// 하나의 메서드가 여러 형태를 가질 수 있다.
//move()--->
//하나의 변수에 통으로 데이터르 관리하고 싶다면 ...자료구조(배열)
Animal[] animals = new Animal[3];
animals[0] = new Animal();
animals[1] = new Tiger();
animals[2] = new Human();
for(int i = 0; i < animals.length; i++){
animals[i].move();
}
}// end of main
}//end of class
. 업캐스팅과 다운캐스팅이란?
업캐스팅(Upcasting)과 다운캐스팅(Downcasting)은 객체 지향 프로그래밍에서 다형성을 활용할 때 사용되는 개념입니다.
업캐스팅(Upcasting)
- 업캐스팅은 부모 클래스의 참조 변수로 자식 클래스의 객체를 참조하는 것을 말합니다.
- 부모 클래스의 데이터 타입으로 자식 클래스의 객체를 대입하는 것을 의미합니다.
- 업캐스팅은 자동으로 이루어집니다.
다운캐스팅(Downcasting)
- 다운캐스팅은 부모 클래스의 참조 변수를 자식 클래스의 객체로 변환하는 것을 말합니다.
- 다운캐스팅은 명시적으로 형변환을 해야 합니다.
- 다운캐스팅은 업캐스팅된 객체가 실제로 자식 클래스의 객체일 때만 가능합니다. 그렇지 않으면 ClassCastException(예외) 이 발생할 수 있습니다.
package com.polymorphism;
public class Fruit {
String name;
int price;
public void showInfo(){
System.out.println("상품명 : " + name);
System.out.println("가격 : " + price);
}
}
package com.polymorphism;
public class FruitTest1 {
public static void main(String[] args) {
//다양한 형태로 바라볼 수 있다.-다향성
Fruit fruit1 = new Banana();//업캐스팅
Fruit fruit2 = new Peach();//업캐스팅
fruit1.showInfo();
System.out.println("----------");
fruit2.showInfo();
fruit1.showInfo();
//사전 기반 지식으로 컴파일, 런타임정보
//위 상황에서 바나나의 원산지를 정보를 출력하시오.
//업캐스팅된 상태: 컴파일 시점에 부모에 있는 변수나 , 메섣드만 확인 가능
String resultOrigin = ((Banana) fruit1).origin;// 다운 캐스팅 처리
System.out.println("바나나 원산지 : " + ((Banana) fruit1).origin);
//키워드 - 인스턴스오브 연산자
//instanceof --> 예약어. 참이면 반환 거짓이면 안함
if (fruit1 instanceof Peach) {
System.out.println("여기 들어올까요? 1");
}
if (fruit1 instanceof Banana) {
System.out.println("여기 들어올까요? 2");
}
//도전문제
//fruit1 에 saleBanana() 메서드를 호출 하시오.
((Banana) fruit1).saleBanana();
//검증
fruit1.showInfo();
}//end of main
}// end of class
'JAVA 객체 지향 핵심' 카테고리의 다른 글
(JAVA) 추상 클래스(abstract class) - 18 (0) | 2025.04.23 |
---|---|
(JAVA) 스타크래프트 만들어 보기 - ver3 (0) | 2025.04.22 |
(JAVA)연관관계(Association) - 16 (1) | 2025.04.22 |
(JAVA)Composition(포함 관계) - 15 (2) | 2025.04.21 |
(JAVA)상속(Inheritance) - 14 (0) | 2025.04.21 |