본문 바로가기
DevOps/GoLang

Go 프로그래밍 언어

by SeleniumBindingProtein 2023. 1. 2.
728x90
반응형

 

GO 프로그래밍 언어

  • 2007년 구글에서 개발을 시작하여 2012년 GO 버젼 1.0을 완성하였다.
  • GO는 이후 계속 향상된 버젼을 내 놓았으며 2022년 초에는 버젼 1.18 에 이르렀다.
  • 흔히 golang 이라고도 불리우는 Go 프로그래밍 언어는 구글의 V8 Javascript 엔진 개발에 참여했던 Robert Griesemer, Bell Labs에서 유닉스 개발에 참여했던 Rob Pike, 그리고 역시 Bell Labs에서 유닉스 개발했으며 C 언어의 전신인 B 언어를 개발했던 Ken Thompson이 함께 개발하였다.
  • Go는 전통적인 컴파일, 링크 모델을 따르는 범용 프로그래밍 언어이다.
  • Go는 일차적으로 시스템 프로그래밍을 위해 개발되었으며, C++, Java, Python의 장점들을 뽑아 만들어졌다. C++와 같이 Go는 컴파일러를 통해 컴파일되며, 정적 타입 (Statically Typed)의 언어이다.
  • 또한, Java와 같이 Go는 Garbage Collection 기능을 제공한다.
  • Go는 단순하고 간결한 프로그래밍 언어를 지향하였는데, Java의 절반에 해당하는 25개의 키워드만으로 프로그래밍이 가능하게 하였다.
  • 마지막으로 Go의 큰 특징으로 Go는 Communicating Sequential Processes (CSP) 스타일의 Concurrent 프로그래밍을 지원한다.

 

=> Go는 정적 타입의 언어이며, 정적 타입의 언어와 동적 타입의 언어 차이를 먼저 알아보도록 하자.

 

정적 타입 언어 (Statically typed language)

  • 컴파일 시 변수의 타입이 결정되는 언어이다. 
    • 컴파일 인간이 이해할 수 있는 언어로 작성된 소스 코드(고수준 언어 : C, C++, Java 등)를 CPU가 이해할 수 있는 언어(저수준 언어 : 기계어)로 번역(변환)하는 작업을 말한다.
  • 변수에 들어갈 값의 형태에 따라 직접 변수의 타입을 명시해줘야 한다.
  • 컴파일 시 자료형에 맞지 않는 값이 들어있으면 컴파일 에러 발생한다.
  • Java, C, C++, C#, Scala,  Fortran, Haskell, ML, Pascal 등이 있다.

정적 타입 언어의 장점

  • 타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입 관련한 런타임 오류를 방지할 수 있고 타입의 안정성이 높다.
  • 특히, 사용자에게 배포되는 앱의 경우 타입 관련한 검증을 컴파일 시에 하지 않고 런타임에 하게 되면 앱 사용 시 타입 불일치로 인한 크래시의 발생 위험이 높아진다.
  • 컴파일 시에 미리 타입을 결정하기 때문에 실행 속도가 빠르다.
  • 코드의 가독성이 좋고, 다수의 협업이나 프로젝트의 장기 개발 및 유지보수에 유리하다.

정적 타입 언어의 단점

  • 매번 코드 작성시 변수형을 결정해줘야 하는 번거로움이 있다.

 

동적 타입 언어 (Dynamically typed language)

  • 컴파일 시 자료형을 정하는 것이 아니라 런타임 시 자료형이 결정된다.
    • 런타임 환경은 프로그래밍 언어가 구동되는 환경이다. 예를 들어, JavaScript 가 Browser 에서 실행된다면 '런타임 환경' 은 Browser 가 되고, Node.js 에서 실행된다면 '런타임 환경' 은 Node.js 가 된다. 또한, "최적의 runtime 을 제공한다" 는 "최적의 구동 환경을 제공한다" 와 동일한 의미로 해석할 수 있다.
  • 타입 없이 변수만 선언하여 값을 지정할 수 있다.
  • Groovy, Python, JavaScript, Ruby, Smalltalk, Lisp, Objective-C, PHP, Prolog 등이 있다.

동적타입 언어의 장점

  • 런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성이 높다.
  • 타입 관련하여 지켜야 할 규칙이 적기 때문에 상대적으로 코드가 짧고 Learning-Curve가 낮다.

동적타입 언어의 단점

  • 실행 도중에 변수에 예상치 못한 자료형이 들어와 TypeError를 발생할 수 있다.
  • 타입 관련 Error는 런타임 시 확인할 수 밖에 없기 때문에, 코드가 길고 복잡해질 경우 타입 에러를 찾기가 어려워진다.
  • 이러한 불편함을 해소하기 위해 TypeScript나 Flow 등을 사용할 수 있다.

 

Go언어의 특징

더보기

1. 정적타입 : 자료형에 형이 정해져 있다.

2. 강타입 : 자료형 변환(타임 캐스팅)이 항상 명시되어야 한다.

3. 안전성 : 타입 안전성과 메모리 안전성 높다.

4. 병행성 : 스레드를 한 단계 더 추상화한 '고루틴'이라는 개념 사용한다.

5. 가비지 컬렉션 : 결과물에 go runtime이 내장되는데 go run time이 메모리를 핸들링한다.

6. 컴파일 언어 : 인터프리터 언어가 아니지만 근접한 수준의 빠른 컴파일 언어이다.

7. 포인터는 존재하지만, 포인터 연산은 없다.

 

Go언어에 없는 것들

1. 클래스

2. 상속

3. 생성자

4. final

5. 제네릭

 

Go 프로그래밍 언어 사이트

https://go.dev/

 

The Go Programming Language

DevOps & Site Reliability With fast build times, lean syntax, an automatic formatter and doc generator, Go is built to support both DevOps and SRE.

go.dev

 

Go 기본 개념 및 공부 참조 사이트

내가 Go 기본 개념을 숙달하는데 많은 도움을 줬던 사이트를 공유하고자 한다.

다시 공부하는 마인드로, 매일 블로그에 정리할 예정이다.

 

http://golang.site/

 

예제로 배우는 Go 프로그래밍

쉽고 재미있는 Go 프로그래밍 예제로 배우는 Go 프로그래밍 I like a lot of the design decisions they made in the [Go] language. Basically, I like all of them. - Martin Odersky, Creator of Scala

golang.site

https://tutorialedge.net/golang/getting-started-with-go/

 

Getting Started With Go

In this tutorial, we are going to get you up and running with Go so that you can go off and write your own Go programs.

tutorialedge.net

https://codingnuri.com/golang-book/index.html

 

Go 프로그래밍 입문

 

codingnuri.com

 

728x90
반응형

'DevOps > GoLang' 카테고리의 다른 글

Go UUID/GUID generator  (0) 2023.01.10
Go 구조체 & 포인터 & 슬라이스 & 맵  (0) 2023.01.08
Go 반복문 & 제어문  (0) 2023.01.08
Go 변수 & 상수  (1) 2023.01.02
Go 데이터 타입  (0) 2023.01.02

댓글