▶ 바인딩 ( Binding )
1) 정의
- 실제 실행할 메소드 코드와 호출하는 코드를 연결 시키는 것
2) 종류
- 정적 바인딩 : 프로그램이 실행되기 전 컴파일 단계에서 메소드와 메소드 호출부를 연결
- 동적 바인딩 : 컴파일 시 정적 바인딩된 메소드를 실행할 당시의 객체 타입을 기준으로 바인딩 되는 것
ex ) 정적 바인딩 - Car 객체에 있는 getEngine() 메소드 호출시
// 부모객체
public class Car {
private String engine;
public String getEngine() {
return engine;
}
public void setEngine(String engine) {
this.engine = engine;
}
@Override // Object의 toString을 오버라이딩하는 메소드
public String toString() {
return engine;
}
}
---------------------------------------------------
// 자식 객체
public class Spark extends Car {
private double discountOffer;
public double getDiscountOffer() {
return discountOffer;
}
public void setDiscountOffer(double discountOffer) {
this.discountOffer = discountOffer;
}
@Override // Car의 toString을 오버라이딩하는 메소드
public String toString() {
return super.toString() + " / " + discountOffer;
}
}
---------------------------------------------------
Car c1 = new Car ("경유 엔진");
System.out.println(c1.getEngine());
// Car 객체에 있는 getEngine() 메소드를 호출
// 프로그램 실행 전, 컴파일러는 getEngine() 메서드가 Car에 있는 것으로 인식,
// c1.getEngine() 호출코드와 Car.getEngine() 코드를 연결한다 == 정적바인딩
System.out.println(c1.toString());
// 경유 엔진 출력
// Car 참조변수 c1을 이용해서
// Car 객체에 있는 오버라이딩된 toString() 메소드를 호출 == 정적바인딩
ex) 동적 바인딩 - 다형성 적용시 바인딩
Car c2 = new Spark("경차 엔진", 0.5);
System.out.println(c2.toString);
// 경차 엔진 / 0.5 출력
// 실행전 : c2가 Car타입이므로 Car의 toString()을 호출 == 정적바인딩
// 실행후 : c2가 Car타입 참조변수이지만 실제 자식인 Spark객체를 참조하고 있어
Spark의 오버라이딩된 toString()를 호출 == 동적바인딩
3) 동적 바인딩의 장점
- 업캐스팅 상태의 참조 변수를 별도의 다운캐스팅 없이 자식의 오버라이딩된 메소드를 호출할 수 있다.
'Java > 공부' 카테고리의 다른 글
[JDBC] 정리 (0) | 2022.04.03 |
---|---|
[Java] 컬렉션 (Collection) _ List, Set, Map 0316 (0) | 2022.03.21 |
[Java] 다형성 (Polymorphism) (0) | 2022.03.21 |
[Java] 상속 (Inheritance) (0) | 2022.03.21 |
[Java] 객체 지향 프로그래밍 (OOP) (0) | 2022.03.20 |