본문 바로가기

Java/공부

[Java] 바인딩 (Binding) 0315_1

바인딩 ( 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