티스토리 뷰




Go 언어란, Google이 개발한 Programming Language이다.

세간에서는 Go언어를 사용하여 프로그래밍 하는 자를 Gopher(고퍼)라고 부른다.


Go언어는 C언어를 기반으로 만들어졌으며, 간단하고 간결한 직관적인 문법을 추구하고 있다.


현재 Go언어는 웹 서버, 웹 브라우저, 봇, 검색 엔진, 컴파일러, 인터프리터, 클라우드, 데이터베이스, 운영체제 등을 개발하는데 유리하며 또 유용하게 사용되고 있다.

우리가 사용하고 있는 Docker, Dropbox, Netflix, Twitch 등이 바로 Go언어를 사용하여 개발되었고, 구동되고 있다.

그 외 Go언어로 작성된 수많은 오픈소스 라이브러리가 libraries.io, github, golanglibs  등을 통해 공유되고 있다.

소위말해, Go언어는 최근 가장 Hot한 언어인 셈이다.

이렇게 많은 사람들과 기업에서 Go언어를 채택하여 소프트웨어를 개발하고 있고, 이것은 우리가 Go언어를 배워야 할 충분히 타당한 이유라고 생각한다.



자, 그렇다면 Gopher가 되기에 앞서, Go언어의 특징은 과연 무엇일까?


  • 정적 타입, 강 타입, 타입 추론
  • 컴파일 언어
  • Garbage Collector
  • Go Routine

이처럼 나열된 4가지의 큰 특징을 갖는다.



1-1. 정적 타입


C,C++와 같이 Go언어 또한 정적 타입 언어이다. 이에 반대되는 동적 타입 언어로는 Python, Javascript 등이 있다.

정적 타입과 동적 타입은 변수의 타입이 결정되는 시점으로 구분할 수 있다.

이를테면, 정적 타입은 컴파일 과정에서 변수의 자료형이 정해지고, 동적 타입은 실행 과정에서 자료형이 정해진다.

따라서 동적 타입 언어의 변수는 리터럴에 따라 수시로 형변환하여 자료형이 바뀔 수 있다.


1-2. 강 타입


C,C++ 같은 언어는 약 타입 언어로 암시적 형변환을 지원한다.

이를테면, 정수형 변수와 부동소수점 변수를 더하거나 뺄 때, 정수형 변수를 부동수소점 변수로 형변환하여 결과를 반환한다.

하지만 Go언어는 강 타입 언어로 임시적 형변환을 지원하지 않아 정수형 변수와 부동소수점 변수를 더하거나 뺄 때, 정수형 변수를 부동소수점 변수로 캐스팅해야 한다.


1-3. 타입 추론


Go언어는 리터럴에 따라 자료형을 결정하는 타입 추론을 지원한다.

하지만 동적 타입 언어와 다르게 컴파일 과정에서 자료형이 결정되는 정적 타입 언어라는 사실을 인지해야 한다.

 * 동적 타입 언어를 처음 접하는 사람들은 대개 타입 추론 자체를 동적 타입으로 오해하는 경우가 있다.


2-1. 컴파일 언어


프로그래밍 언어는 크게 컴파일 언어와 인터프리팅 언어로 구분할 수 있다.

Go언어는 코드 전체를 컴파일하여 실행 파일을 만드는 컴파일 언어이다.

Java, C#처럼 컴파일의 결과물이 바이트 코드 형태가 아닌 C,C++처럼 바이너리 파일을 만들어낸다.

바이너리 파일은 Virtual machine이 아닌 CPU에서 바로 실행되기 때문에 속도가 빠르고 간결하다는 장점이 있다.


이에반해, 스크립트 언어라고도 불리는 인터프리팅 언어는 인터프리터가 line-by-line으로 코드를 한 줄씩 해석하여 실행한다.

코드를 수정하고 다시 실행하는데 일련의 컴파일 과정을 거치지않는 장점이 있지만, 성능상의 한계는 존재한다.


3-1. Garbage Collector


동적으로 메모리를 할당하여 사용한 경우, 당연히 할당된 메모리 해제의 과정이 요구된다.

Garbage Collector는 자동으로 메모리 할당을 해제하여 프로그래머의 수고로움을 덜어주는 역할을 한다.  

Java, Javascript, Python, C#등의 언어에서는 Virtual machine이 Garbage Collector를 제공하고 있지만,

Go언어에서는 실행 파일(바이너리 파일)안에 Garbage Collector가 내장되어 있다.

따라서 Gopher들은 메모리 관리에서 벗어나 로직을 코딩하는데 더욱 집중할 수 있다.


4-1. Go Routine


Go언어에서는 Go Routine(고루틴)을 통해 동시성을 제공하고 있다.

고루틴은 운영체제 커널에서 제공되는 Thread와 다르게 Go 런타임이 관리하는 lightweight logical Tread이다.

실제 Thread를 할당받아 사용하는 것은 맞지만, 고루틴이 Thread에 1대1 대응되는 것은 아니다.

각각의 고루틴은 채널을 이용하여 통신한다. 다시말해 고루틴끼리 데이터를 공유하거나 서로를 제어할 수 있다.


차후에 고루틴에 관한 자세한 내용을 실제 코드와 함께 다시 다뤄볼 예정이다.







이제 당신은 예비 Gopher가 되었다. Go언어를 빠르게 쉽게 습득하기 위한 선생님으로 도서 한 권을 추천한다.

가장 빨리 만나는 Go 언어  


가장 빨리 만나는 Go 언어 표지






많은 시간이 들어도 좋다. 차근차근 한 걸음씩 Go언어를 학습해보자!



'Study Space > Go' 카테고리의 다른 글

Go 언어 크로스 컴파일  (0) 2018.03.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함