동적 바인딩
프로그램 실행 시에 메서드 호출을 해결하는 과정
객체지향의 특징인 다형성을 가능하게 함
예제 코드
abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Woof Woof!");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("Meow Meow!");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound(); // Woof Woof!
myCat.sound(); // Meow Meow!
}
}
- myDog와 myCat 변수는 실행 시점에 실제 객체 타입에 sound() 메서드를 호출
- 컴파일 시점에는 어떤 메서드가 호출될지 결정 X, 실행 시점에 결정 O
추상화
복잡한 시스템을 단순화하여 중요한 부분만을 표현하는 것
추상 클래스와 인터페이스를 통해 구현
예제 코드
abstract class Animal {
abstract void sound();
}
class Bird extends Animal {
@Override
void sound() {
System.out.println("Tweet Tweet!");
}
}
class Fish extends Animal {
@Override
void sound() {
System.out.println("Blub Blub!");
}
}
- Animal 클래스는 추상 클래스, sound() 메서드는 추상 메서드
- 각 서브 클래스가 해당 메서드를 구현하도록 강제
- 추상화를 통해 공통적인 인터페이스를 정의, 세부 구현을 서브 클래스에 맡김
Share article