더북(TheBook)

3.6 포인터와 참조 타입

C와 C++에서는 포인터(값의 메모리 주소를 저장하는 변수)로 메모리 주소를 직접 제어할 수 있다. 하지만 복잡한 포인터 연산은 코드의 가독성을 떨어뜨리고 버그를 많이 유발한다. 그래서 자바, 파이썬, C# 같은 언어에서는 포인터를 사용하지 않고 객체를 참조하는 방식으로 메모리에 간접 접근한다. Go는 포인터와 참조 타입을 모두 제공한다.

슬라이스, 맵, 채널, 함수, 메서드는 참조 타입이다. 참조 타입은 포인터와 마찬가지로 데이터를 직접 갖지 않고, 실제 데이터가 있는 메모리 공간을 가리킨다.

Go는 C와 C++처럼 포인터 사용을 허용하여 메모리 주소에 직접 접근할 수 있게 하지만, 버그를 유발하기 쉬운 주소 값 연산은 허용하지 않는다. 포인터의 역할은 값에 접근하는 수단일 뿐이고, 포인터 변수가 가진 주소 값을 직접 변경할 수는 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.