Search

'go언어'에 해당되는 글 1건

  1. 2014.11.04 Go언어 소개

Go언어 소개

프로그래밍 2014. 11. 4. 20:55 Posted by 정직한 UnHa Kim

Go언어는 효율성을 추구하는 실용적인 프로그래밍 언어이다.

1. 개발 생산성

2. 멀티코어 CPU 하드웨어 사용의 효율성

2가지를 모두 추구하는 대신 기능성은 포기했다.


Go언어의 창시자는 C++언어의 복잡성에 학을 떼고, 

공개적으로 미니멀리즘을 추구한다고 하는 데,

어쩔 때는 그게 좀 과한 듯 하다.

(키워드 숫자를 줄이려고 interface가 가변형 자료형을 겸하는 것은 조금 오버이고,

 에러처리도 if문으로 처리한다는 것은 소스코드를 번잡하게 만든다.) 


개발자 생산성 향상을 위해서는 다음 특징을 가진다.

1. 빠른 컴파일.

2. 단순하지만 필수기능은 다 갖춘 문법.

3. 자동 메모리 관리

4. 유니코드 지원

5. 풍부한 표준 라이브러리 및 수많은 제3자 공개 라이브러리.

6 테스트, 테스트 커버리지, 동시 사용 데이터 충돌(레이스) 감지등 풍부 개발 도구 기본 내장


마지막으로...

7. 소스코드 자동 정리 (써보면 입이 떡 벌어진다.)



하드웨어의 효율적 사용을 위해서 다음 특징을 가진다.

1. AOT 컴파일. (C, C++의 컴파일 개념. Java나 C#이 사용하는 JIT컴파일의 반대 개념.)

2. C보다 2배 정도 느리고, Java와는 비슷한 단일 스레드 실행 속도.

3. 멀티코어 CPU를 안전하고 효율적으로 사용하기 위한 독특한 기능 (goroutine, channel)


Go언어에서는 포기한 기능들은 다음과 같다.

1. 상속은 지원하지 않음. 대신 mixin을 지원.

2. 제너릭은 지원하지 않음. 대신, interface{}가 가변형 변수 역할을 함.

(제너릭 기능은 Go언어 창시자들이 미니멀리즘에 기반하여 의도적으로 배제한 것이 아니라,

 Go언어 창시자들이 기술적인 문제를 해결하지 못해서 아직 추가되지 못한 경우임.)

3. 에러처리 구문이 취약함. 대신, defer문, recover()함수를 사용해서 panic상황에 대처 .


이러한 장단점이 혼합된 Go언어를 실제로 사용해 본 느낌과,

1. 기능성이 약간 부족하지만 오히려 간결해서 좋은 면도 있다.

   기능이 풍부하지 않지만 꼭 있어야 하는 기능들은 거의 다 있으며,

   반대로, 쓸데없는 기능이 없기 때문에 남이 개발한 소스 코드를 읽을 때도

   처음보는 기능을 접하는 경우는 거의 없다.

   그래서, 불러다 쓰는 제 3자 라이브러리가 의심스러우면 

    (저작권 문제가 없는 한도 내에서) 거리낌없이 소스 코드를 들여다보고 만지작 거리게 된다.

2. 개발 생산성이 확연하게 높아진다.

3. 실행속도 문제로 걱정할 일이 없다.


트위터가 서비스 초기에 루비(Ruby)언어를 사용했으나, 성능 상의 문제로 인해서 서비스 불안정의 어려움을 겪었고, 결국은 상당 부분을 Java와 Scala언어로 다시 개발해야 했다.

드롭박스도 서비스 초기에 파이썬(Python)언어를 사용했으나, 성능 상의 문제로 인해서 일부분을 Go언어로 대체하였다.


트위터와 드롭박스의 공통점은 높은 개발 생산성을 얻기 위해서

루비(Ruby), 파이썬(Python)등 동적언어를 사용하였으나,

성능상의 문제로 인해서 동일한 기능을 정적 언어로 다시 작성했다는 것이다.


Go언어는 성능이 상당히 좋으므로 

한 번 개발해 놓으면, 성능 문제 때문에 다시 개발해야 할 필요성이 적으며,

개발 과정에서도 비교적 높은 개발 효율성을 얻을 수 있다.


무한 경쟁 시대에 비용 효율성 면에서 강점을 가진다.

(구글이 비용 절감 차원에서 만든 것 같다.)


그 대신에 포기해야 하는 것이 기능성인데, 

막상 써보면 기능이 심하게 부족하다고 느껴지지는 않는다.


물론, C++, Java, C#등을 사용하던 사람은

1. 변수 선언 순서가 반대임.

2. 에러 처리 구문이 없고 if문으로 처리함.

3. 제너릭이 없음

등의 장애물에 좌절하곤 하지만 

실제로 사용해보면 의외로 그럭저럭 쓸만 하다.

(Java도 1.4까지 Generic이 없었지만 다들 잘만 쓰더라.)


Go언어를 가장 잘 설명하는 문구는  '모든 면에서 80%'이다.

파이썬(혹은 루비) 개발 효율성의 80%,

C++ 실행 효율성의 80% (사실은 50%이지만, 동적 언어보다 수백배 빠르므로 체감상 80%)


모든 면에서 약간씩 부족하고 아쉽지만,

비용절감의 면에서는 타의 추종을 불허하고,

여러모로 공동작업이 편하다.




소스코드 1천 라인은 0.2초, 12만 라인은 9.2초만에 컴파일 하는 것을 보여주는 동영상.

Go언어의 무시무시한 컴파일 속도를 체감할 수 있다.

실제로 사용해 보면 파이썬 같은 동적언어를 쓰고 있는 지, 정적 컴파일 언어를 쓰고 있는 지 헷갈림.

동영상 원본 링크 : https://www.youtube.com/watch?v=wwoWei-GAPo

.

TAG

댓글을 달아 주세요