정적바인딩 vs 동적바인딩

codakcodak·2023년 7월 20일
0

Java

목록 보기
12/17
post-thumbnail

바인딩

프로그램에 사용된 구성 요소의 실제 값 또는 프로퍼티를 결정짓는 행위

1. 정적바인딩

  • 컴파일 시간에 성격이 결정

2. 동적바인딩

  • 메서드를 호출할 때 발생
  • runtime(실행시점)에 따라 결정

3. 코드

class Car {//상위클래스
	int price=10;
	public void drive() {
		System.out.println("주행합니다.");
	}
	public static void stop() {
		System.out.println("멈춥니다.");
	}
}
class SuperCar extends Car{//하위클래스
	int price=100;
	@Override
	public void drive() {
		System.out.println("매우 빠르게 주행합니다.");
	}
	
	public static void stop() {
		System.out.println("빠르게 멈춥니다.");
	}
}

public class Polymorphism {

	public static void main(String[] args) {
		SuperCar sp1=new SuperCar();//sp1의 정적메서드,인스턴스 변수는 SuperCar로 결정(정적바인딩)
		System.out.println(sp1);
		System.out.println(sp1.price);
		sp1.drive();//sp1의 인스턴스메서드는 SuperCar로 결정(동적바인딩)
		sp1.stop();
		
		Car sp2=new SuperCar();//sp2의 정적메서드,인스턴스 변수는 Car로 결정(정적바인딩)
		System.out.println(sp2);
		System.out.println(sp2.price);
		sp2.drive//sp2의 인스턴스메서드는 실제 메모리에 올라있는 타입인 SuperCar로 결정(동적바인딩)
		sp2.stop();
	}
SuperCar타입을 가르키는 SuperCar참조변수
poly.SuperCar@2a139a55
100
매우 빠르게 주행합니다.
빠르게 멈춥니다.
SuperCar타입을 가르키는 Car참조변수
poly.SuperCar@15db9742
10
매우 빠르게 주행합니다.
멈춥니다.
  • 스태틱 메서드,인스턴스 변수는 변수 선언 시점(컴파일 시점)에 변수의 타입기준으로 결정된다.
  • 인스턴스 메서드는 실행시점(호출시점)에 실제 가지고 있는 타입기준으로 결정된다.
profile
숲을 보는 코더

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

정말 잘 읽었습니다, 고맙습니다!

답글 달기