정적/동적 바인딩, 정적/동적 타입
⛓️ 바인딩이란?
함수를 컴파일하면, 선언된 함수의 코드는 메모리에 저장되고 함수 호출문에는 코드의 메모리 주소값이 저장된다.
여기서 프로그램을 실행하면 함수 호출문에서 함수 코드가 저장된 주소로 이동한 후 함수를 실행하고 원래 위치로 돌아오는데
이때 함수 호출문에서 함수 코드가 저장된 주소로 연결하는 과정을 바인딩이라고 한다.
🏃🏻 동적 바인딩
동적 바인딩
의 경우, 컴파일 과정에서는 부모 클래스의 함수를 참조하지만 런타임 과정에서 실제로는 자식 클래스의 함수와 바인딩된다.
왜?
정적 바인딩
의 경우, 컴파일 과정에서 정의된 타입 형식을 참조해서 어떤 클래스와 메소드를 참조할지 결정하는데(=super class의 메소드)
동적 바인딩
의 경우에는 런타임에 실제 객체를 찾으니까 오버라이드된 자식 클래스의 메소드의 결과가 출력된다.
→ 다형성(Polymorphism)을 잘 보여준다
(컴파일러는 static method에 대해 실제 객체를 찾는 작업을 하지 않음)
- 대부분의 객체 지향 언어가
동적 바인딩
을 지원한다물론 예외도 있음
필요에 따라 정적 바인딩과 동적 바인딩을 섞어서 쓰는 것 같다.
정적/동적 타입과 정적/동적 바인딩은 다른 개념
정적 타입의 언어는 컴파일 시 변수의 타입이 결정되고, 동적 타입의 언어는 런타임 시 변수의 타입이 결정된다.
정적타입 vs 동적타입 (Static type.. : 네이버블로그 (naver.com)
→ 동적 언어는 동적 타입을 지원하는 언어를 뜻함
(e.g. 코틀린은 정적 언어. 따라서 컴파일 시점에 모든 객체나 메서드의 타입을 알 수 있다. 파이썬은 동적 언어. 따라서 런타임에 타입이 결정되고 이 때문에 정수형으로 선언된 변수가 문자형으로도 저장될 수 있다.)
동적 언어의 강타입언어와 약타입언어
https://redthing.tistory.com/entry/정적-타입-언어-동적-타입-언어-Python
아우 어렵다..!