더북(TheBook)

가비지 컬렉션

C나 C++ 같은 언어는 가비지 컬렉션(garbage collection)을 제공하지 않아서 개발자가 직접 메모리를 관리해야 한다. 메모리를 할당하고 해제하는 작업은 까다롭고 디버깅도 어려워서 로직을 작성하는 것보다 더 많은 시간을 할애하기도 한다.

Go 언어는 가비지 컬렉션을 제공하므로 메모리 관리에 신경 쓰지 않고 문제 해결에만 집중할 수 있다.

 

빠른 컴파일과 실행 속도

2003년 켄트벡이 TDD(Test-Driven Development, 테스트 주도 개발)를 주장한 이후 TDD의 중요성은 계속 강조되고 있다. TDD는 ‘테스트 코드 작성(red) > 코드 완성으로 테스트 성공(green) > 리팩토링(refactor)’ 사이클로 개발하게 한다. TDD는 코드가 수정될 때마다 수정된 코드를 컴파일하고 실행하는 것을 전제로 한다. 하지만 프로그램의 규모가 커지고 테스트 단계가 많아질수록 red-green-refactor 사이클은 점점 느려진다. C++나 자바 같은 컴파일 기반의 언어는 컴파일 과정이 전체 사이클을 느리게 하고, 컴파일이 필요 없는 파이썬이나 루비 같은 인터프리터 언어는 실행 과정이 느리다.

그림 1-14 TDD의 개발 사이클

Go는 패키지화된 소스 코드에서 실제로 사용되는 부분만 컴파일하므로 컴파일 속도가 빠르다. 패키지1이 패키지2를 참조하고 있고 패키지2가 패키지3을 참조하고 있을 때 main 패키지에서 패키지1을 임포트하면 컴파일 언어는 보통 패키지1, 패키지2, 패키지3 모두 컴파일한다. 하지만 Go는 main 패키지에서 패키지2나 패키지3의 코드를 사용하지 않는다면 패키지1만 컴파일한다. 이렇게 최적화된 컴파일 방식이라 아무리 규모가 큰 프로젝트라도 대부분 수 초 이내에 컴파일이 완료된다. Go의 문법을 간결하게 설계한 것도 이처럼 빠른 컴파일 속도를 유지하기 위해서다.

Go는 빠른 성능을 목표로 개발됐다. 개발 초기부터 빠른 실행 속도에 초점을 두었다. 여러 자료에서 Go의 실행 속도는 C나 C++와 유사한 성능을 보인다. Go는 컴파일과 실행 속도가 빨라서 개발 사이클을 빠르게 유지할 수 있다. Go의 빠른 컴파일과 실행 속도 덕에 스크립팅 언어가 사용되는 곳에서 Go를 사용하기도 한다(Go Shebang Script).

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