로즈마리

글 작성자: daily_zi

https://dev.to/codehakase/how-i-learned-go-programming

Go 프로그래밍 언어의 특성

Go는 전통적인 컴파일, 링크 모델을 따르는 범용 프로그래밍 언어이다. Go는 일차적으로 시스템 프로그래밍을 위해 개발되었으며, C++, Java, Python의 장점들을 뽑아 만들어졌다. C++와 같이 Go는 컴파일러를 통해 컴파일되며, 정적 타입 (Statically Typed)의 언어이다. 또한 Java와 같이 Go는 Garbage Collection 기능을 제공한다. Go는 단순하고 간결한 프로그래밍 언어를 지향하였는데, Java의 절반에 해당하는 25개의 키워드만으로 프로그래밍이 가능하게 하였다. 

 

Go 언어는 빠른 성능, 안정성, 편의성, 쉬운 프로그래밍을 목표로 개발되었으며 범용 프로그래밍 언어이다.

Go 언어의 큰 특징은 다음과 같다.

  • 정적 타입, 강 타입
  • 컴파일 언어
  • 가비지 컬렉션
  • 병행성(Concurrency)
  • 멀티코어 환경 지원
  • 모듈화 및 패키지 시스템
  • 빠른 컴파일 속도

마지막으로 Go의 큰 특징으로 Go는 Communicating Sequential Processes (CSP: 순차적 프로세스들의 통신) 스타일의 Concurrent 프로그래밍을 지원한다.

 


Concurrency in Golang

Go 언어에서 동시성을 설명 할 때 주로 사용되는 문구가 있다.

Do not communicate by sharing memory; instead, share memory by communicating.

 

동시성(병행성)과  병렬성(Parallelism)의 차이는 무엇일까?

  • 동시성: 동시 처리의 논리적인 개념. 단일 코어에서 스레드를 여러 개 생성하면 겉으로 보기에는 동시에 실행되는 것처럼 보이지만 실제로는 스레드 여러 개가 시간을 쪼개어 순차적(시분할)으로 실행된다. 물론 논리적인 개념이기 때문에 단일 코어에서 처리되든 멀티코어에서 처리되든 병행성은 만족한다.
  • 병렬성: 동시 처리의 물리적인 개념입니다. 작업을 여러 CPU 코어에 나눠서 동시에 처리하는 상태를 뜻한다.

 


 

정적 타입과 동적 타입

프로그래밍 언어에서 타입은 우리말로 자료형을 뜻한다. 그리고 자료형에는 보통 정수, 실수, 불, 문자열, 객체 등이 있다. 여기서 자료형을 컴파일할 때(Compile-time) 결정하면 정적 타입이고, 실행할 때(Run-time) 결정하면 동적 타입이라 합니다.

요즘 흔히 사용하는 Python, Ruby, JavaScript 등의 스크립트 언어는 동적 타입(Dynamic Typing) 언어이다.

 

반면 C, C++, Java, C# 등의 언어는 정적 타입(Static Typing) 언어이다. 이 언어들은 값의 형태에 따라 각각 자료형을 가지며 자료형에 맞지 않는 값을 대입하면 컴파일할 때 에러가 발생한다.

 

'프로젝트 > go' 카테고리의 다른 글

Go 언어 입문_Method(메소드)  (0) 2019.09.09
Go 언어 입문_Struct(구조체)*  (0) 2019.09.06
Go 언어 입문_함수*  (0) 2019.09.06
Go 언어 입문_변수  (0) 2019.09.02
jteeuwen/go-bindata  (0) 2019.06.24