다형성이란?
다형성
- 하나의 특정한 자료형에 여러 종류의 자료형을 가질 수 있는 것.
- 상속은 여러 자식 클래스를 만들 수 있게 해주고, 이를 통해 다형성을 구현할 수 있게 된다.( 왜냐하면 부모클래스 자료형에 여러 자식 클래스 객체가 참조될 수 있으므로)
다형성 예시
// 💡 가능 - 자식 클래스는 부모 클래스에 속함
Button button1 = new Button("Enter");
Button button2 = new ShutDownButton();
Button button3 = new ToggleButton("CapsLock", true);
// ⚠️ 불가
ShutDownButton button4 = new Button("Enter");
ToggleButton button5 = new ShutDownButton();
- Button 이라는 부모 클래스에 자식 클래스ShutDownButton 등이 참조되는 모습.
- 자식 클래스는 부모클래스에 속하는 걸 볼 수 있다.
- 그러나 자식 클래스에 부모클래스를 참조하거나, 형제클래스끼리 참조는 허용되지 않는다.
// ⭐️ 편의 : 모두 Button이란 범주로 묶어 배열 등에서 사용 가능
Button[] buttons = {
new Button("Space"),
new ToggleButton("NumLock", false),
new ShutDownButton()
};
for (Button button : buttons) {
// ⭐️ 모든 Button들은 func 메소드를 가지므로
button.func();
}
- 다형성이 있기 때문에, 하나의 부모자료형 배열로 자식클래스들을 배열로 참조 가능하다
- 모든 Button 클래스들은 func메서드를 가지니까, foreach문으로 한번에 처리가 가능. 매우 효율적인 코드로 보인다.
instanceof 연산자
- A instanceof B로 하면, A가 B클래스의 자료형에 속하는 인스턴스인지(동일한 클래스이거나 B의 자식 클래스인지) 확인하는 연산자이다.
- 다형성을 보기에 제격인 메서드
- toggleButton instanceof Button시 토글버튼은 버튼클래스의 인스턴스이니 true.
부모 자료형을 공통으로 사용할 때, 자식 인스턴스내의 기능을 사용해야 하는 경우
System.out.println("\n- - - - -\n");
YalcoChicken ycStores[] = {
new YalcoChicken(3, "판교"),
new YalcoChicken(17, "강남"),
new YalcoChickenDT(108, "철원"),
};
for (YalcoChicken store : ycStores) {
if (store instanceof YalcoChickenDT) {
// ⭐️ 자식 클래스의 기능을 사용하려면 명시적 타입 변환
((YalcoChickenDT) store).takeDTOrder();
} else {
store.takeHallOrder();
}
}
- 여러 자료형을 묶어서 조상 클래스 자료형으로 진행할때 강제 형변환을 해주어야 하는 상황이 있다.
- 위 상황에서 YalcoChickenDT로 타입변환을 안하면 store는 얄코치킨 인스턴스로 인식되고, 얄코치킨에는 takeDTOrder라는 메서드가 없어서 실패나게 된다.
Object 클래스
Object obj1 = new Object();
// ⭐️ IDE의 안내대로 다른 패키지의 클래스 임포트
// 💡 해당 클래스의 생성자가 public 이어야 함
Object obj2 = new YalcoChicken(3, "판교");
Object obj3 = new ShutDownButton();
Object obj4 = new FireSlime();
// 원시 자료형들도 Object의 인스턴스로... - 이후 자세히 배울 것
Object obj5 = true;
Object obj6 = 1;
Object obj7 = "Hello";
- 모든 클래스의 최고 조상.
- 모든 자료형을 받아줄 수 있는 자료형.
- 자바는 구체적으로 사용할 자료형을 명시해서 사용해야 예상치 못한 오류로부터 안전하게 프로그래밍 가능하다.
출처
- 사이트, 검색명 (날짜)
'얄코의 제대로 파는 자바 > 섹션5 객체지향 프로그래밍' 카테고리의 다른 글
추상클래스 (0) | 2024.03.20 |
---|---|
클래스의 final (0) | 2024.03.19 |
상속 (0) | 2024.03.16 |
접근 제어자 (0) | 2024.03.14 |
클래스(정적) 필드와 메소드 (0) | 2024.03.12 |