📙 목차
🧡 학습 목표
- 다형성이 무엇인지 학습한다.
- 형변환이 무엇인지 학습한다.
객체지향의 4가지 특징
- 캡슐화 - 데이터의 보호
- 상속 - 재사용성과 확장
- 추상화 - 데이터의 계층적 표현
- 다형성 - 객체지향의 꽃
1. 다형성(Polymorphism)
다형성이란?
- 하나의 타입으로 여러 객체를 다룰 수 있는 객체지향의 4번째 특징이다.
- 추상 계층 특징을 통해 다형성을 구현할 수 있다.
2. 인터페이스를 활용한 다형성
클래스 구조 참고
2-9. 객체지향 PART 3 - 추상화
📙 목차추상화인터페이스 상속을 활용한 추상 계층 표현클래스 상속을 활용한 추상 계층 표현실습과제🧡 학습 목표추상화가 무엇인지 학습한다.객체지향의 4가지 특징캡슐화 - 데이터의 보호
gajicoding.tistory.com
public class Main {
public static void main(String[] args) {
// 다형성 활용
Animal animal = new Cat();
animal.exist(); // ✅
animal.makeSound(); // ✅
}
}
3. 형변환(Casting)
형변환이 다형성에서 중요한 이유
- 부모타입으로 자식타입을 다룰 수 있는 이유는 자동으로 형변환(Casting) 이 발생했기 때문이다.
- 자식타입 → 부모타입: 업캐스팅(UpCasting)
- 부모타입 → 자식타입: 다운캐스팅(DownCasting)
업캐스팅(UpCasting) - 자식 → 부모
- 업캐스팅은 부모의 타입으로 데이터를 다룰 수 있다.
- 자식 클래스의 고유기능을 활용할 수 없다.
public class Main {
public static void main(String[] args) {
// 다형성 활용
Animal animal = new Cat(); // ✅ 자동 형 변환
animal.exist(); // ✅
animal.makeSound(); // ✅
}
}
다운캐스팅(DownCasting): 부모 → 자식
- 자식 클래스의 고유 메서드를 사용할 수 있다.
public class Main {
public static void main(String[] args) {
// 다형성 활용
Animal animal = new Cat();
animal.exist();
animal.makeSound();
Cat cat = (Cat) animal; // ✅ 다운캐스팅(부모Animal -> 자식Cat)
cat.scratch(); // ✅ 자식 클래스의 기능 활용 가능
}
}
! 주의 사항
- 잘못된 다운캐스팅은 컴파일단계에서 감지할 수 없다.
- 컴파일 시점에는 오류 없이 통과되지만 런타임시점에 ClassCastException 이 발생할 가능성이 있다.
- 다운캐스팅을 사용할때 항상 instanceof 를 활용해야 한다.
public class Main {
public static void main(String[] args) {
Animal animal2 = new Dog();
// ✅ 안전한 다운캐스팅(animal2 가 Cat 의 인스턴스 유형인지 확인합니다.)
if (animal2 instanceof Cat) {
Cat cat = (Cat) animal2;
cat.scratch();
} else {
System.out.println("객체가 고양이가 아닙니다.");
}
}
}
4. 다형성의 장점 맛보기
한 가지 타입으로 유연한 프로그래밍 처리를 할 수 있다 !
public class Main {
public static void main(String[] args) {
Animal[] animals = {new Cat(), new Dog()};
for (Animal animal : animals) {
animal.makeSound();
}
}
}
5. 실습 과제
클래스를 활용해서 위 내용의 3단계 계층 구조를 설계해보세요.
- 다형성을 직접 활용해보세요.
- 업캐스팅과 다운캐스팅을 직접 구현해보세요.
- 다운캐스팅 시 instanceof 를 사용해보세요.
(클래스 활용 참고)
2-9. 객체지향 PART 3 - 추상화
📙 목차추상화인터페이스 상속을 활용한 추상 계층 표현클래스 상속을 활용한 추상 계층 표현실습과제🧡 학습 목표추상화가 무엇인지 학습한다.객체지향의 4가지 특징캡슐화 - 데이터의 보호
gajicoding.tistory.com
LocalGame 클래스 추가
public class LocalGame extends Game {
}
public class Main {
public static void main(String[] args) {
Program program = new OnlineGame();
program.install();
Game game = (Game) program;
game.install();
game.play();
Game game2 = new LocalGame();
if (game2 instanceof OnlineGame) {
OnlineGame og2 = (OnlineGame) game2;
og2.checkInternet();
} else {
System.out.println("온라인 게임이 아니다.");
}
}
}
'Java > 강의' 카테고리의 다른 글
[📙 Java 문법 종합반] 3-2. Optional - null 을 다루는 법 (0) | 2025.04.16 |
---|---|
[📙 Java 문법 종합반] 3-1. 예외(Exception)과 예외처리(try-catch) (0) | 2025.04.16 |
[📙 Java 문법 종합반] 2-9. 객체지향 PART 3 - 추상화 (1) | 2025.04.15 |
[📙 Java 문법 종합반] 객체지향 PART 2 - 상속 (0) | 2025.04.15 |
[📙 Java 문법 종합반] 2-7. 객체지향 PART 1 - 캡슐화(접근제어자) (0) | 2025.04.15 |