[TIL] Day 12 — Java 다형성 + 추상클래스 + 인터페이스
날짜: 2025-11-04
기술 스택: Java OOP abstract interface Polymorphism
부트캠프: 풀스택 개발자 부트캠프 3주차
다형성 규칙
- 상위 클래스는 하위 클래스를 참조 가능 (업캐스팅)
- 접근 영역은 상위 클래스 영역으로 한정
- 오버라이딩된 메서드는 런타임에 실제 객체 타입의 구현 호출 (동적 바인딩)
- 하위 클래스는 상위 클래스 참조 불가. 단, 상위 타입으로 참조 중인 객체를 강제 형변환 시 가능
추상 클래스
abstract class Animal {
void breathe() { System.out.println("호흡"); }
abstract void sound(); // 구현 없음 — 하위 클래스에서 반드시 구현
}
class Dog extends Animal {
@Override
public void sound() { System.out.println("멍멍"); }
}
Animal dog = new Dog(); // 다형성
dog.sound(); // 멍멍
인터페이스
interface Flyable { void fly(); }
interface Swimmable { void swim(); }
class Duck implements Flyable, Swimmable { // 다중 구현
@Override public void fly() { System.out.println("날다"); }
@Override public void swim() { System.out.println("헤엄치다"); }
}
abstract class vs interface
| 구분 |
추상 클래스 |
인터페이스 |
| 키워드 |
extends |
implements |
| 다중 상속 |
불가 |
가능 |
| 필드 |
일반 필드 가능 |
public static final 상수만 |
| 메서드 |
일반·추상 메서드 모두 가능 |
추상 메서드 + default/static 메서드 (Java 8+) |
| 관계 |
IS-A |
CAN-DO (능력 보유) |
트러블슈팅
- 추상 클래스
new Animal() 시도 시 컴파일 오류 — 하위 클래스로 생성
implements 한 클래스에서 미구현 메서드 있으면 컴파일 오류 — 모두 구현
더 알아볼 것