바인딩
바인딩은 프로그램의 어떤 기본 단위가 가질 수 있는 구성 요소의 구체적인 값이나 성격을 확정하는 것을 말합니다.
예를 들면,
int n = 0; 에서
int는 자료형,
n은 변수의 이름,
0은 변수의 자료값입니다.
이것들이 변수 속성의 구체적인 값입니다.
위와 같이 자료형, 이름, 자료값에 구체적인 값을 할당하는 각각의 과정을 바인딩이라 합니다.
출처 :
https://medium.com/pocs/%EB%B0%94%EC%9D%B8%EB%94%A9-binding-4a4a2f641b27
정적 바인딩과 동적 바인딩
정적 바인딩은 컴파일 시간에 일어나고, 동적 바인딩은 런타임 시간에 일어납니다.
int n; 이라 하면 컴파일 시간에 변수 n은 int로 할당되고, 변하지 않습니다.
동적 바인딩은 가상 함수로 예를 들겠습니다.
부모 클래스 : Parent
자식 클래스 : Child
가상 함수 : test()
main 함수에서 업캐스팅된 child 변수가 test() 함수를 호출한다고 가정합니다.
런타임 시간에 Parent 클래스의 test()를 실행하려는데,
test 함수는 가상 함수이고 child 변수가 업캐스팅된 변수이기 때문에, 할당된 Child 클래스를 확인합니다.
자식 클래스에 test()가 오버라이딩 되어 있기 때문에 Child 클래스의 test()를 실행합니다.
이것이 동적 바인딩 입니다.
런타임 시간에 체크해서 맞는 클래스의 함수를 호출합니다.
업캐스팅 과정에서 child를 포인터 배열로 만들어 봤는데, 원하는대로 실행되지 않았습니다.
처음 코드는 포인터에서 변환하기 위한 적절한 생성자가 없다는 오류가 나옵니다.
왜 저런 오류가 나오는지 int*를 만들어서 실험해봤습니다.
p[1]에 주소를 담으려 하니 할당 할 수 없다고 오류가 납니다.
즉, p[1]은 주소가 아닌 상수 값을 담아야 합니다.
이처럼 [사진 2]도 동적으로 할당할 수 없는 공간에 할당했기 때문에 오류가 났다고 판단을 하여,
child를 이중 포인터로 만들었습니다.
원하는대로 오류없이 잘 작동됐습니다.
제가 공부한 부분을 정리한 내용이기 때문에 틀린 부분 있을 수 있습니다!!
혹시 틀린 부분이 있으면 알려주세요!!
'C++' 카테고리의 다른 글
[C++] map과 unordered_map이란? (2) | 2024.04.29 |
---|---|
[C++] 미로게임 | 미로 생성 알고리즘-프림 알고리즘 (0) | 2024.04.29 |
[C++] 미로게임 (0) | 2023.04.13 |
[C++] 파일 입출력 (0) | 2023.04.02 |
[C++] 포인터 (0) | 2023.03.26 |