2019년 새로이 떠오르는 언어 - Go
2019학년도를 맞이하여 새로운 언어를 배워본다면 어느 것이 좋을까... 고민하는 사람에게 추천할 만한 언어로 Go가 있다. 새로 나오는 모든 언어를 배우는 것은 불가능하지만 Go는 당신의 무기고(skill set)에 추가되었을 때 앞으로 커리어에 커다란 보탬이 될 언어다. 1
Go는 2019년에 프로그래밍 세계를 지배할 언어인 듯 하다. 구글이 인터넷 세계를 지배하듯이... 2009년에 구글에 의해 만들어진 이 언어는 C/C++의 장점을 제공하면서 단순성, 간결성, 안전성을 제공한다. 간단히 말해서 Go는 실제적인 면에서 모든 점에서 우수하다. Go로 작성된 프로그램 코드는 이해하기 쉽고 실행할 때 믿을 수 없을 정도로 효율적이다. 새로운 개발자가 배우기도 쉽다. 정적 타입의 컴파일되는 언어로 동시성도 효율적으로 다룬다.
Go는 오픈소스 프로그래밍 언어로서 간단하고, 안정적이고 효율적인 소프트웨어를 쉽게 만들 수 있는 언어다. 구글은 멀티코어와 네트워크, 그리고 거대한 코드베이스의 시대에 프로그래밍 성능의 향상을 위해 Go를 만들고 전격적으로 도입한다. 이 언어를 설계한 사람들은 현재 알려져 있는 좋은 언어의 특징들을 모두 다 담음으로써 다른 언어들의 단점을 극복하려고 노력했다.
- 정적 타이핑과 효율성 (like C++ or Java)
- 코딩 생산성(빠른 개발)과 편리성 (like Python or JavaScript)
- 네트워킹과 멀티프로세싱의 높은 성능
그 결과 go는 파이썬의 편리함과 C++과 자바의 성능을 뛰어넘어 대규모(scalable) 어플리케이션 개발을 가능하게 한다. Go는 이러한 여러 가지 장점 때문에 많은 곳에서 사용되고 있다. 성능을 필요로 하는 웹서버에서도 쓰이지만 간단한 서비스를 빠르게 구축하는데도 유용하다. 네트워킹을 매우 잘 다뤄서 시스템 언어로서도 좋다. Go로 구현된 몇 가지 사례를 들자면 이더리움 소스 코드와 하이퍼레저 블록체인의 기본 언어이고, 구글의 Kubernetes도 Go로 구축되었으며, 최고 수준의 기술 기업의 웹서버들이 이 언어로 구축되었다. 구글의 많은 서비스들이 GO로 개발되었다. 또한 Go는 데이터 분석 분야에서도 각광을 받고 있는데, 분석가의 툴에서 제품화로 넘어가기 위해 꼭 필요한 성능을 보장해 준다는 점이 주효한 것으로 보인다.
GO의 성공 요인은 이것이 가벼운 오픈소스 언어로서 오늘날의 마이크로서비스 아키텍처에 잘 맞는 언어라는 점이다. Go는 개발자로서 당신의 툴박스에 추가되기에 완벽한 언어다. 많은 일을 잘 해 낼 수 있는 언어이므로 어떤 일에서든 쓰일 수 있는 도구가 될 것이다. 아직은 상대적으로 새로운 언어이고 파이썬이나 JS에 비하면 아직은 뒤쳐져 있으나 배워두면 좋은 언어로 손꼽히고 있으며, 조만간 많은 프로젝트에 도입될 것으로 기대된다.
2017년 스택오버플로우 설문에서 Go는 인기도가 급상승했다. 2016년 이후 스택오버플로우에서는 6만여명의 개발자들에게 "Most Loved, Dreaded, and Wanted Languages”로 선호도를 조사하는데 그 리스트에는 새로운 언어가 대부분이었다. 대표적인 것이 Mozilla’s Rust, Smalltalk, Typescript, Apple’s Swift, and Google’s Go 등이다. 그러나 3년동안 연속으로 가장 사랑받는 프로그래밍 언어의 반열에 오른 것은 Rust, Swift와 Go 였다.
간단한 프로그램 예제를 통해 이 언어의 문법을 살펴보자. 파이썬과 많은 부분에서 유사하고 C 언어와도 비슷한 구문이 있다. 함수의 선언은 타입을 가져서 함수 호출에 대해 정적 타입 검사가 가능하다.
package main
import "fmt"
func plus(a int, b int) int {
return a + b
}
func plusPlus(a, b, c int) int {
return a + b + c
}
func main() {
res := plus(1, 2)
fmt.Println("1+2 =", res)
res = plusPlus(1, 2, 3)
fmt.Println("1+2+3 =", res)
}
다음은 클래스 메소드의 예를 보여준다. 필드의 선언을 struct로 정의하고 메소드는 그 구조체에 대한 메소드로 자바의 this 대신 객체 변수를 메소드 앞에 선언하고 있음을 볼 수 있다. 클래스 메소드는 C++의 구문과 비슷하다고 할 수 있다. 그런가하면 &라는 주소연산을 쓰는 것도 볼 수 있다.
이렇게 파이썬과 자바 인터페이스, C++의 클래스 등 여러 가지가 섞인 구문을 가진다. 지역변수는 파이썬처럼 지정에 의해 선언되지만 매개변수와 함수는 타입을 지정하게 하여 정적 타입 언어의 장점을 살리고 있다. 그리고 메모리 할당이나 사용은 자바 언어의 GC 방식을 따르고 있음을 알 수 있다.
package main
import "fmt"
type rect struct {
width, height int
}
func (r *rect) area() int {
return r.width * r.height
}
func (r rect) perim() int {
return 2*r.width + 2*r.height
}
func main() {
r := rect{width: 10, height: 5}
fmt.Println("area: ", r.area())
fmt.Println("perim:", r.perim())
rp := &r
fmt.Println("area: ", rp.area())
fmt.Println("perim:", rp.perim())
}
- 자바와 파이썬과 JS를 공부한 다음에... 뭔가 새로운 것을 찾는 사람에게 해당되는 말이다. (이 글은 미국의 2018년 상황을 바탕으로 작성된 것인데, 최근에는 미국의 핫한 기술과 언어가 국내로 들어오는데 3-4년 정도의 시간이 걸리는 것으로 보인다. 그러므로 앞으로 2-3년 후에 취업 시장에서 도움이 될 만한 언어들이라고 볼 수 있다. 사실 새로운 언어에 대한 관심과 약간의 공부 만으로도 면접에서 높은 평가를 받을 수 있다. 새로운 언어에 대한 관심이 그만큼 중요하다.) [본문으로]