this 포인터
2017. 8. 6. 22:43ㆍprogramming/C++
C와 C++의 가장 큰 문법적 차이점은 class 문법의 유무이다. C에서 C++로 발전 하면서 class 개념이 생겨난 배경과 발전과정을 설명하고자 한다.
프로그램을 구현하기 위해서는 자료와 그 자료를 관리, 수정, 동작 시키는 함수가 존재하고, 이 두 가지는 의존성이 생긴다. 예를 들자면 아래의 CODE (1)과 같이 STUDENT 구조체의 내용이 변경되면 이를 출력해주는 printStudent()도 수정을 해야 한다. 이 경우에 기능적인 결함은 없지만 문법적인 연관성이 없어 처음 이 코드를 보는 개발자는 printStudent()에 대한 존재 조차 모를수도 있고 이해도가 떨어질수 밖에 없다.
따라서 개발자는 CODE(2)와 같이, 구조체 내에 함수포인터를 선언하여 함수와 자료형을 묶어 주고자 했다. 이런 구조는 아직도 리눅스 커널에서는 빈번히 사용하는 패턴이라고 한다. 하지만 17번 째 줄을 보면 멤버함수인 printStudent()를 호출하는데 객체 자신의 주소를 몰라 &a를 같이 넘겨주는 조금은 이상한 모양을 갖고있다.
이를 해결해주고자 C++의 class에서는 Code(3)과 같이 this로 hidden parameter를 넘겨준다.