자바에서 다형성(Polyporhism)은 간단한 개념인데
대부분이 설명을 너무나도 어렵게 해서 쉬운 개념인데도 이해가 힘들다
일단 다형성이란 큰 객체 안에 작은 객체를 넣어서 여러 형태로 변환해 사용하는 것인데
코드를 통해 한번 알아보자
처음 볼 코드는 Human 클래스와, Human 클래스를 상속받는 Cheolsu 클래스다
여기서 큰 개념의 클래스는 Human이고
Cheolsu 클래스는 Human을 상속받기 때문에 작은 개념의 클래스라 볼 수 있다
실제 테스트 시 큰 개념인 Human에 Cheolsu를 넣어 정의할 수 있는데
여기서 껍데기는 Human이지만 안의 내용은 Cheolsu이기 때문에
call 메소드를 호출할 시 Cheolsu Call이 호출되고
Cheolsu에 들어있는 Status 메소드는 호출할 수 없다
왜냐면 Human 객체에는 Status 메소드가 없어서
Cheolsu 객체를 가져다 넣는다 해도 내용만 가져다 넣는것이지
메소드까지 넣어주는게 아니기 때문이다
동일한 내용을 한번 더 복습해본다
이번에는 Champion 인터페이스와
Champion을 implements 받는 Garen 클래스인데
여기서 Champion이 더 큰 개념이고
Garen이 작은 개념이라 볼 수 있다
이제 개념이 좀 정리가 될 텐데
큰 개념에는 작은 개념을 넣을 수 있지만
작은 개념에는 큰 개념을 넣을 수 없다
챔피언은 가렌이라고 할 수 있지만
가렌이 모든 챔피언이 될 수는 없는 것과 같은 말이다
정리해보자면 다음과 같은데
큰 개념에 작은 개념의 클래스를 넣어 정의시킨 뒤에
작은 개념의 값을 사용할 수 있다
이걸 바로 다형성(Polyporhism) 이라고 하는 것이다
실제 업무 시에 자주 보는 예제가 interface인 map 안에
HashMap이나 LinkedHashMap을 넣어서 사용하는 경우인데
Map 인터페이스 안에 HashMap과 LinkedHashMap이 들어있어 작은 개념이기 때문에
큰 개념인 Map에 HashMap과 LinkedHashMap을 넣어 사용할 수 있는 것이다
사용한 코드들은 아래를 참고해주면 된다
// 다형성 예제 : 큰 개념 Human
public class Human {
public void call() {
System.out.println("Human Call");
}
}
// 다형성 예제 : 작은 개념 Cheolsu
public class Cheolsu extends Human {
public void call() {
System.out.println("Cheolsu Call");
}
public void status() {
System.out.println("Cheolsu Status");
}
}
// 다형성 예제 : 큰 개념 Champion
public interface Champion {
public void call();
}
// 다형성 예제 : 작은 개념 Garen
public class Garen implements Champion {
@Override
public void call() {
System.out.println("Garen Call");
}
}
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
// 다형성 사용 예제
public class PolymorphismTest {
public static void main(String[] args) {
// 다형성 예제
Human h = new Cheolsu(); // Human 객체에 Cheolsu 객체를 넣음
//Cheolsu c = new Human();
// 작은 개념의 객체에 큰 개념의 객체를 넣을 수는 없음..
h.call(); // Cheolsu Call이 나오게 됨
// h.status(); // human에 존재하지 않는 메소드는 사용 불가
Champion c = new Garen(); // Champion 객체에 Garen 객체를 넣음
c.call(); // Garen Call이 나오게 됨
Map<String, String> m = new HashMap<String, String>(); // 실 사용 예제
Map<String, String> m2 = new LinkedHashMap<String, String>(); // 실 사용 예제 2
}
}
'Language > Java' 카테고리의 다른 글
자바 static 변수, 메소드 예제 및 사용이유 (0) | 2019.11.18 |
---|---|
자바 배열 선언 및 초기화 방법 및 예제 (0) | 2019.11.18 |
자바 Error Exception 차이 정리 (0) | 2019.11.11 |
자바 예외처리 종류 및 예제 (0) | 2019.11.11 |
자바 추상클래스 예제 및 사용이유 정리 (0) | 2019.10.30 |
댓글