바인딩은 함수 호출 시 호출된 부분을 해당 함수의 정의와 연결짓는 것을 뜻한다. 메모리 관점에서 말하자면, 함수의 정의가 위치한 메모리 주소로 연결되는 것이다.
정적 바인딩은 컴파일 시 호출되는 바인딩을 뜻하며, 점프 (연결)할 주소가 결정되어있어 미리 바인딩되는 형태를 뜻한다.
Java에서 static 메서드는 컴파일 시에 결정되는 정적 바인딩 형태다.
동적 바인딩은 프로그램 실행 시에 호출되며, 실행파일 생성 시에는 아직 바인딩이 되지 않고 보류되는 형태이다. 프로그램 실행 시, 사용될 객체의 클래스 형에 의해 호출될 함수가 결정된다.
Java에서 인스턴스 메서드는 실행 시 (Runtime 시)에 결정되는 동적 바인딩 형태다.
동적 바인딩은 타입 체킹으로 인해 정적 바인딩에 비해 수행속도도 느리고 메모리 공간활용 효율도 나쁘지만, 오버라이딩을 활용해 객체 지향 프로그래밍이 가능하여 코드의 재사용성을 높일 수 있다는 장점이 있다.
그러므로 각자가 필요할 때 적절히 활용하는 것이 중요하다.
정적 바인딩 | 동적 바인딩 | |
---|---|---|
수행속도 | 비교적 빠름 | 비교적 느림 |
메모리 공간 활용 효율 | 비교적 좋음 | 비교적 낮음 |
특징 | - | 다형성 활용 프로그래밍 가능 |