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 |
O |
O |
Inheritance(상속) |
X |
O |
O |
Overloading |
X |
O |
O |
GC(Garbage Collector) |
O |
X |
O |
Pointer |
O |
O |
X |
Poiner 연산 |
X |
O |
X |
Import/Package |
O |
O |
O |
Interface |
O |
O |
O |
NULL |
O |
O |
O |
Implicit type conversion(암시적 형변환) |
X |
O |
O |
Explicit type conversion(명시적 형변환) | O | O | O |
goroutine
Go 언어는 Thread라는 개념 대신 goroutine이라는 개념을 사용합니다.
해당 goroutine은 Thread보다 가벼운 개념이며, 데이터를 주고받을 때 공유 메모리를 사용하지 않고 채널이라는 개념을 도입해
채널을 통해 데이터를 주고 받는다고 합니다. 또한 멀티플렉싱 방식으로 운영체제의 도움 없이 내부적으로 동시성 있게 돌기 때문에,
context에 대한 부담이 적다고 합니다.
이에 대해 자세한 설명은 길어질 것 같으니 따로 만들어놓겠습니다.
마치며...
'프로그래밍 > Go언어' 카테고리의 다른 글
Golang for문 사용법!! (0) | 2021.05.16 |
---|---|
Golang 구조체 설명 (0) | 2021.05.02 |
Go "fmt" 패키지의 사용법과 Print, 내장함수 println 차이 (0) | 2021.04.18 |
Go lang 시작하기(VSCode 셋팅) (0) | 2021.04.05 |
Go 언어의 goroutine에 대해서... (0) | 2020.11.04 |
댓글