[Java] 정적 바인딩과 동적 바인딩

최정은·2022년 10월 22일
0

Backend Roadmap

목록 보기
12/23
post-thumbnail

바인딩(Binding)은 함수 호출 시, 호출된 부분을 해당 함수의 정의와 연결짓는 것을 뜻한다. 메모리 관점에서 함수의 정의가 위치한 메모리 주소로 연결되는 것이다. 바인딩이 되는 시점에 따라 정적 바인딩과 동적 바인딩으로 구분할 수 있다.

정적 바인딩

  • 컴파일 시간에 성격이 결정된다.
  • 오버로딩
  • private, final, static 이 붙은 메서드

오버로딩은 같은 메서드를 매개변수의 타입과 개수를 다르게 정의하여 다양한 메서드를 구현하는 것을 의미한다.

class Student {
	String name;
    int age;
    
    public void printInfo(String name) {
    	System.out.println("[Student] name: " + name);
    }
        
	public void printInfo(String name, int age) {
    	System.out.println("[Student] name: " + name + " age: " + age);
    }
Student student = new Student();
student.printInfo("jungeun");
student.printInfo("jungeun", 23);

Student 객체를 생성하여 메서드를 호출했다. 컴파일러가 매개변수 종류와 개수가 다르기 때문에 두 개의 printInfo 메서드를 컴파일 과정에서 구분할 수 있다. 즉, 컴파일 과정에서 어떤 메서드를 호출할 지 결정되기 때문에 오버로딩은 정적 바인딩이다.

동적 바인딩

  • 실행 시간(Runtime)에 성격이 결정된다.
  • 늦은 바인딩(Late Binding)이라고도 부른다.
  • 오버라이딩
  • Java의 다형성, 상속이 가능한 이유

오버라이딩은 상속 관계에 있는 클래스 간에 같은 이름을 재정의하는 기술을 의미한다.

class Person {
	String name;
    int age;
    
    public Person(String name, int age) {
    	this.name = name;
        this.age = age;
    }
    
    public void printInfo() {
    	System.out.println("[Student] name: " + name + " age: " + age);
    }
}

class Student extends Person {
	String school;
    
    public Student(String name, int age, String school) {
    	super(name, age);
        this.school = school;
    }
    
    public void printInfo() {
    	System.out.println("[Student] name: " + name + " age: " + age + " school: " + school);
    }
}

super 키워드는 부모 클래스로부터 상속받은 필드나 메서드를 자식 클래스에서 참조하는 데 사용하는 참조 변수다.

Person person = new Student("jungeun", 23, "syu");
person.printInfo();

컴파일 과정에서 person 객체가 호출한 printInfo 메서드가 Person 클래스의 메서드인지 Student 클래스의 메서드인지 판단할 수 없다. 왜냐하면 person 객체가 Stundent 객체가 될 수도 있기 때문에 타입을 확정지을 수 없기 때문이다. 컴파일러는 person 객체의 타입 오류를 확인할 뿐이다.

실행 시간에 객체의 타입이 확정되면서 Person의 printInfo 메서드를 호출하는 것이다. 따라서 실행 시간에 어떤 메서드를 호출할 지 정해지기 때문에 오버라이딩은 동적 바인딩이다.

private, final, static 키워드를 붙이면 특정 메서드를 오버라이딩이 불가능하게 만들 수 있다. 그러면 해당 메서드는 정적 바인딩으로 실행된다.

정리

정적 바인딩동적 바인딩
수행 속도비교적 빠름비교적 느림
메모리 공간 활용 효율비교적 좋음비교적 낮음
특징-다형성 활용 프로그래밍 가능

Reference

정적 바인딩 vs 동적 바인딩

profile
https://dolmeng22.tistory.com 로 이전했습니다~

0개의 댓글