golang 개요

Programming/golang 2015. 10. 21. 21:34

기본

  • 정적 타입, 강타입 언어
  • 컴파일 언어
  • 가비지 컬렉션
  • 병행성
  • 모듈화 및 패키지 시스템
  • 빠른 컴파일 속도

정적 타입, 강타입 언어

정적 타입

런타임에 자료형이 결정되지 않고 컴파일 타임에 자료형이 결정된다.

강타입

약타입 언어는 정수형 변수에 실수형 데이터 대입이 명시적인 형변환을 하지 않아도 가능하다. 이에 반해 강타입 언어는 명시적인 형변환을 통한 대입이 아닌 경우 컴파일 에러를 발생한다.

컴파일 언어

텍스트 형태의 소스코드를 컴파일 하여 기계어 형태의 바이너리 파일 생성. 해당 바이너리 파일을 실행하여 실행속도가 빠르다.

가비지 컬렉션

기존 네이티브 언어인 C, C++ 은 메모리를 사용자(개발자)가 할당을 하였으면, 반드시 사용자가 해제 작업을 해야했다. 이는 개발시에 포인터에 대한 검증 작업을 강제하였으며, 댕글링 포인터 등등 여러가지 메모리 관련 이슈를 발생시켰다.
가비지 컬렉션은 위와 같은 관련 작업을 언어단에서 지원해주기때문에 개발자는 메모리의 유효성에 대한 검증 및 메모리 해제에 대한 부담감을 가지지 않아도 된다.
물론 언어단에서 지원하는 기능이기때문에 네이티브 언어에 비해서 가비지 컬렉션 코스트가 추가되는 단점이 존재한다. 
하지만 이제 가비지 컬렉션에 대한 비용을 부담이라고 여기지 않는다고 개인적인 의견을 남겨본다.

병행성

언어차원에서 병행성을 지원한다.
C. C++ 의 스레드가 아닌 이보다 적은 비용의 고루틴을 지원한다. 고루틴이라는 하나의 태스크를 정의하고 해당 태스크는 go 언어에서 자체 생성된 스레드풀에서 처리가 진행된다.

모듈화 및 패키지

언어 차원에서 모듈화를 제공한다. 이는 간단한 방식으로 인터넷에 존재하는 코드를 바로 가져와서 사용할 수 있음을 의미한다.
git, mercurial, sebversion, bazaar 를 지원하는 저장소의 코드를 편하게 가져올 수 있다.

컴파일속도

C, C++ 는 헤더파일간의 연결고리가 복잡할 수록 컴파일 속도가 매우 느리다. 거기에 하나의 헤더파일이 수정되는 경우 해당 헤더파일과 의존관계가 있는 모든 파일에 대해서 다시 컴파일 해야하는 이슈가 있어 컴파일에 드는 비용이 매우 크다.
이에 반해 go 는 소스코드를 패키지화 하여 변경된 부분에 대해서만 컴파일이 이루어지므로 컴파일 속도가 매우 빠르다.


WRITTEN BY
Profile
- 선빈 -


,