본문 바로가기

개발일지

요즘 뜨는 4대 프로그래밍 언어

반응형

지구상에 존재하는 프로그래밍 언어는 아주 많다. 위키백과에 따르면 1945년부터 2014년까지 프로그래밍 언어는 거의 매년 1개 이상 탄생했다. 중간에 사라진 언어도 있지만, 현재까지 공개된 프로그래밍 언어는 300개가 넘는다. 개발자들은 수많은 언어 가운데 자신에게 익숙하며 빠르게 개발할 수 있는 언어를 사용한다.


그런 프로그래밍 언어 중 최근 가장 주목 받는 4개의 프로그래밍 언어를 알아보자


C언어 계보 잇는 ‘고’

‘고‘는 2009년 구글이 만든 프로그래밍 언어다. C언어의 대안 언어로도 평가되고 있으며, 현재 1.4버전까지 나온 상태다.


많은 개발자들은 고의 장점을 동시성(Concurrency) 프로그래밍으로 꼽는다. 큰 규모의 프로그램에선 보통 작업을 나누고 이를 동시에 처리하곤 한다. 전통적인 언어는 동시성 프로그래밍을 시도할 때 속도가 느려지거나 복잡한 과정을 겪어야 했다. 고는 ‘고루틴(goroutine)’으로  쉽게  동시성 프로그래밍을 지원한다. 복잡하게 작성하고 디버깅도 어려웠던 병렬처리도 편한 방법으로 처리할 수 있다. 이때 p쓰레드(pthread)나 멀티프로세싱 라이브러리는 따로 사용하지 않아도 된다.

빌드가 빠른 것도 고의 장점이다. 고는 헤더 파일 등을 통해 의존 관계를 분석하지 않는다. 그 덕분에 기존엔 몇 시간씩 걸리던 컴파일 시간을 줄일 수 있다. 배포도 쉬운 편이다. 고 언어를 빌드하면 기계코드 바이너리 하나가 생성된다. 해당 기계코드는 GC(Garbage Collector)와 디버깅 정보 등을 포함한 실행 파일이다.  파일 크기가 커지는 단점이 있지만, 빌드된 실행 파일 바이너리는 그 자체로 쉽게 실행할 수 있다.

아직 국내에서 고를 활용하는 사례는 적다. 활용 사례가 충분하지 않아 기업에서 쉽게 도입하지는 못하고 있다. 대신 해외에는 고를 도입한 사례를 종종 볼 수 있다. 유튜브, 히로쿠, 도커, 드롭박스는 일부 기술에 고 언어를 활용하고 있다고 밝혔다


제2의 C++ 꿈꾼다, ‘러스트’

러스트는 C++의 대체 언어라고 불린다. 그만큼 C++에서 불편했던 문제를 해결할 수 있도록 설계됐다. 대표적으로 메모리 오류를 잡아준다.

러스트는 LLVM이라는 컴파일러 구조를 통해 최적화를 지원한다. 또한 메모리 할당과 해제 시점을 프로그래머가 직접 제어할 수 있도록 돼 있다. 동시에 메모리 해제 시점을 컴파일러가 정확하게 검증할 수 있고, 런타임에 메모리 관련 오류가 잘 발생하지 않는다.

러스트의 단점은 아직 라이브러리가 부족하다는 점이다. 이제 막 1.0버전이 나와서 아직 많은 참여자를 모으지 못한 탓이다. FFI(Foreign function interface)를 활용해 C 라이브러리를 불러오면서 일부 라이브러리를 보충할 수 있다.


안드로이드 대안 언어, ‘코틀린’

‘코틀린‘은 제트브레인이 2011년 만든 언어다. 자바가상머신(JVM) 언어라 자바와 호환되고 안드로이드 개발에 주로 활용된다. 현재 0.12버전까지 나왔다.

 코틀린은 안드로이드 개발자로 유명한 제이크 왓슨이 알리면서 유명세를 탔다. 제이크 왓슨은 현재 스퀘어에 근무하고 있으며, 안드로이드와 관련한 다양한 오픈소스 프로젝트에 참여했다.

 코틀린은 문법이 간결하다. 코드 길이가 짧은 것이 무조건 좋고 단정할 수는 없지만, 코드가 간결해지면 유지보수를 조금 더 편하게 할 수 있다. 또한 자바는 보통 정해진 원칙을 엄격하게 따르면서 쓰지만, 코틀린은 좀 더 다양하게 표현을 확장할 수 있다. Rx같은 함수 프로그래밍을 할 때면 복잡한 람다식을 사용하는 경우가 많은데, 코틀린을 활용하면 람다식을 보다 간편하게 활용할 수 있다.

 코틀린은 컴파일 속도가 빠른 편이고, 런타임 사이즈가 작아서 안드로이드에 넣기에도 부담이 적다. 또 자바에선 NULL값 관련한 오류가 자주 발생하는데, 코틀린에선 NULL값을 코드에서 없애는 것을 지향한다.  결과적으로 프로그램의 안정성을 높일 수 있다.


애플이 만든 스크립트 언어, ‘스위프트’

iOS나 OS X 프로젝트에 함수형 언어를 하고픈 개발자라면 스위프트를 시도해보면 좋다.

오브젝티브C와 스위프트의 큰 차이는 문법이다. 가령 오브젝티브C는 ‘[]’를 사용해 메소드를 호출하지만, 스위프트는 ‘()’를 이용해 메소드를 호출한다. 또한 스위프트는 자료형을 엄격히 제한한다. ‘옵셔널’이라는 개념을 통해 ‘nil’을 할당할 수 있는 자료형과 그렇지 못한 자료형을 구분하고 있다. 튜플, 문자열 삽입, 제네릭, 연산자 함수 등도 오브젝트티브C에서는 쉽게 구현할 수 없는 스위프트만의 특징이다. 이러한 기능으로 개발자는 의도한 규범이나 가정을 좀 더 명료하게 표현할 수 있다.

 스위프트는 가장 최근에 나온 언어이기 때문에 기존 언어들이 가진 장점들을 많이 차용했다. 코드를 간결하게 적을 수 있고, 함수형 프로그래밍을 지원하며, 코드의 안정성을 높이는 장치도 마련했다. 개발자는 ‘플레이그라운드’라는 도구를 이용해 스위프트 코드의 실행 결과를 실시간 확인할 수 있다.

 그러나 스위프트는 문법이 자주 바뀌고 있어 X코드의 지원이 완벽하지 않다는 지적이 따른다. 스위프트 컴파일러도 안정화되지 않은 상태라, 프로그래밍 도중에 오류메시지를 볼 수도 있다.

반응형