본문 바로가기
프로그래밍/Go언어

Go언어를 왜 사용 할까?

by Hwan2 2020. 11. 4.
반응형



Go언어란?

Google에서 만든 프로그래밍 언어 입니다. C를 기반으로 만들어 졌으며, C언어의 장점을 살리면서

다양한 곳에서 활용할 수 있도록 만든 언어입니다.


즉, 시스템 개발, 운영체제, 웹 서버, 웹 브라우저, 로봇, 검색앤진 등 다양한 곳에서 사용하도록 말이죠.


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

1. 개발 속도

2. 모듈화를 위한 의존성

3. 동적 타입을 가진 속성 언어

4. 가비지 컬렉션

5. 병렬 처리



1. 개발 속도가 빠르다.

Go 언어는 라이브러리에서 여러가지를 제공하고 있습니다. 

Go 언어는 멀티코어 기반으로 설계되어 있기 때문에 현재 하드웨어 개발, 소프트웨어 개발에

큰 이점을 갖고 있는 것이 사실입니다. 코드도 간결하게 짤 수 있습니다.

또한 C/C++에서의 컴파일 시간보다 현저히 빠릅니다. 경험해보지 못했지만 C/C++에 사용되는 라이브러리가 많아질 수록

컴파일 시간은 수시간 ~ 10시간 이상 까지 간다고 합니다. 이럼 정말 개발의 생산성도 떨어지고 모든것이 힘들어 질 것입니다.

반면 Go언어는 이러한 단점들을 최대한 배재하려고 만들어졌습니다.

그 이유는 모듈화를 위한 의존성 때문입니다.


2. 모듈화를 위한 의존성

C++을 예를 들어 보자면 라이브러리가 다른 라이브러리르 참조하는 경우가 많습니다.

때문에 빌드를 할 때 동적 라이브러리 DLL(Dynamic Link Library)나 정적 라이브러리 LIB(STL, stdio.h, iostream 등..)을 사용합니다.

이때 각 라이브러리들은 의존성을 띄고 있으며, 라이브러리의 기능중 하나를 사용하려면 전체 라이브러리를 컴파일 시켜야 합니다.

이때 라이브러리가 많을수록 컴파일 시간이 늘어나며 생산성이 떨어지게 됩니다.


하지만 Go언어는 모듈화를 통해 의존성을 유지하고 있기 때문에 사용자가 필요한 부분만 빼서 쓸 수 있다는 장점이 있습니다.

예를들어 

A.go -> B.go -> C.go가 있다고 해봅시다.

각각 언어는 화살표(->) 방향대로 의존하고 있다고 해봅시다.

그럼 A.go를 사용하려면 B.go만 참조하면 됩니다.

C.go까지 참조 안해도 되죠.


3. 동적 타입을 가진 속성 언어

python이나 JavaScript같은 경우 인터프리터 방식의 컴파일이라 프로그램이 실행되면서 에러를 직면하게 되는 경우가 많습니다.

하지만 Go언어는 정적 타입 언어와 동적 타입 언어를 동시에 지원하기 때문에 컴파일 타임에서 에러를 찾을 수 있습니다.


4. 가비지 컬렉션

C/C++에서 없는 가비지 컬렉션을 Go언어에서 제공합니다. 때문에 사용자는 동적 메모리 할당과 해제에 대한 고민을 하지 않아도 됩니다.

또한 JVM의 가비지 컬렉션과의 차이는 Java Code가 JVM에서 실행되게 되면 JVM내에서 메모리를 관리해주게 됩니다.

하지만 Go언어는 실행파일 내에 가비지 컬렉션이 있기 때문에 좀 더 좋은 퍼포먼스를 낸다고 할 수 있습니다.


5. 병렬처리

Go언어는 멀티코어를 기반으로 만들어진 언어입니다. 때문에 병렬처리 하는데 있어서 많은 도움을 주고 있습니다.

즉, C/C++보다 더 안전하고 편안한 개발을 할 수 있는것이 Go언어 입니다.



개발 언어별 지원 기능

기능 

Go 

C++ 

Java 

Class 

X

Inheritance(상속) 

Overloading 

GC(Garbage Collector) 

Pointer 

Poiner 연산 

Import/Package 

Interface 

NULL 

Implicit type conversion(암시적 형변환)

 Explicit type conversion(명시적 형변환)


goroutine

Go 언어는 Thread라는 개념 대신 goroutine이라는 개념을 사용합니다.

해당 goroutine은 Thread보다 가벼운 개념이며, 데이터를 주고받을 때 공유 메모리를 사용하지 않고 채널이라는 개념을 도입해

채널을 통해 데이터를 주고 받는다고 합니다. 또한 멀티플렉싱 방식으로 운영체제의 도움 없이 내부적으로 동시성 있게 돌기 때문에,

context에 대한 부담이 적다고 합니다.


이에 대해 자세한 설명은 길어질 것 같으니 따로 만들어놓겠습니다.




마치며...

하룻밤에 읽는 Go 언어 이야기를 읽으면서, 중간중간에 모르는 부분들(동시성, goroutine) 등에 대해 자료를 찾아가면서

글을 작성하니 8시간 정도 걸렸네요. Go는 매력적인 언어인것 같고....

공부하려고 저희집 앞 시에서 운영하는 도서관에 "가장 빨리 만나는 Go" 와 "디스커버리 Go 언어"를 신청했으니,

올때까지 기다리면서 DB와 게임서버에서 쓰레드를 어떻게 관리하는지에 대해 공부를 좀 해야겠습니다.

그럼....


반응형

댓글


스킨편집 -> html 편집에서