본문 바로가기

Academy I/Tech Journalism

“요즘 뜨는 4대 프로그래밍 언어, 이렇게 배워보세요”

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


프로그래밍을 공부하는 방법도 다양하다. 누군가는 하나의 언어를 깊이 공부하고, 누군가는 비슷한 특성을 가진 언어를 비교하며 공부한다. 최신 유행하는 새로운 언어를 배우는 개발자도 있다. 역사가 오래된 언어는 참고할 만한 자료가 많지만, 최신 언어는 그렇지 않다. 공부하기 열악한 상황인 셈이다. 이런 사황에서 최신 프로그래밍 언어를 열심히 공부하고 있는 개발자는 어떤 사람일까? 개발자 10명에게 최신 프로그래밍 언어의 장·단점과 공부 과정에 대해 직접 들어보았다.



■ C언어 계보 잇는 ‘고’

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




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


▲고루틴 예. 동시성을 지원한다.(사진 : 고 튜토리얼 페이지)


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


‘gofmt’라는 자체 도구도 고의 특징이다. 개발자마다 괄호나 줄바꿈을 다른 식으로 표현할 수 있다. 이때 ‘gofmt’로 형식이 유지되면 가독성이 좋아져 다른 사람의 코드를 쉽게 읽을 수 있다.

GDG 고 언어 커뮤니티를 처음 만든 김종민 개발자 역시 C언어로 프로그래밍을 하다 고를 접했다. 김종민 개발자는“백엔드 쪽에서 15년 정도 서버 개발을 맡아왔다”라며 “C언어로 멀티쓰레드 프로그램을 개발하고 디버깅하는 게 조금 불편했는데, 고루틴을 보고 공부를 시작했다”라고 설명했다.


김종민 개발자는 “고는 문법 키워드가 25개 정도로 단순한 언어라 초급자도 배우기 쉬울 것”라며 “다만 현재 통합 개발 환경(IDE)이 없고 ‘그래들’이나 ‘NPM’같은 유용한 패키지 매니저가 없다는 게 불편할 수 있다”라고 설명했다.


이름 공개를 꺼린 ㄱ개발자는 “지난해 처음 개발업계에 입문하고 주로 자바를 다뤘다”라며 “새로운 패러다임을 배우고 주요 언어와 비교하면 좋을 것 같아 고 언어를 공부하고 있다”라고 설명했다. 또한 그는 “고의 기본 문법을 익히는 것은 쉬웠고, 공부할 분량도 50-70페이지로 적었다”라며 “대신 중급 단계로 넘어가기 위해 노력해야 할 부분이 많았고 시스템, 네트워크, 웹 프로그래밍 같은 배경 지식도 필요했다”라고 말했다.


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


고 언어가 출시된 지 5년이 지난 만큼, 현재 한글로 된 다양한 자료가 만들어지고 있다. 특히 고 커뮤니티는 문서화를 잘 지원하고 있다.


고 언어 학습시 참고할 수 있는 자료


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

러스트‘는 모질라재단이 2010년 만든 언어다. 2015년 5월 1.0버전이 출시됐다.

러스트는 C++의 대체 언어라고 불린다. 그만큼 C++에서 불편했던 문제를 해결할 수 있도록 설계됐다. 대표적으로 메모리 오류를 잡아준다. 김재주 성균관대학교 컴파일러연구실 석사과정 학생은 “자바같은 쓰레기 수집(GC) 기반 언어를 사용하면 객체의 메모리 할당과 해제를 자동으로 해 주지만, C/C++을 이용하는 프로그래머는 모든 자원을 스스로 할당하고 또 스스로 해제해야 한다”라며 “이때 실수가 일부 발생하고 이런 실수는 찾기도 힘들고 고치기는 더 어려운 버그를 만든다”라고 설명했다.


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


▲러스트 코드 예(사진 : 러스트 홈페이지)


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


러스트 커뮤니티 기여자로 활동하는 서상현 개발자는 “C++에서 겪는 똑같은 메모리 오류는 발생하진 않지만, 러스트 사용자도 메모리 관리를 계속 신경써야한다”라며 “자바같이 GC(Garbage Collection)를 제공하는 언어와 비교해보면 조금 불편할 수 있다”라고 설명했다.


러스트는 아직 국내 활용 사례를 쉽게 찾을 수는 없다. 해외에서는 작은 기업 몇몇이 업무에 도입하는 것으로 알려졌다. 모질라재단이 개발하고 있는 ‘서보’는 러스트를 활용했다. 이런 상황에서 국내에 러스트를 만들고 있는 기여자는 꽤 있다. 러스트가 공개한 기여자 1천여명 중, 한국인 개발자 6명이 100위권 안에 속해 있다. 서상현 개발자는 러스트 커뮤니티 기여 순위에서 32위로 올라와 있다. 그는 개발 9년차로, 주로 프로그래밍 언어와 자바스크립트 엔진을 다루고 있다.


“러스트는 2012년 4월 모질라 개발자였던 로버트 오캘러핸 발표를 듣고 알았습니다. 그 후 러스트에 관심을 가졌습니다. 3개월 정도 시간을 투자해 개념을 익혔고요. C++을 미리 알고 있으면 러스트를 이해하기 쉽긴 했지만, 주변 개발자들을 보니 C++를 몰라도 공부하는 데 큰 지장은 없었습니다.”


과거 러스트를 공부할 수 있는 한글 자료는 찾기 힘들었다. 발표자료 정도만 있을 뿐이었다. 최근 러스트 문서 한글화 프로젝트가 진행 중이다. 우준혁 개발자는 “개발 5년차 직장인으로, 주로 자바 클라이언트 개발이나 C로 통신장비를 개발했다”라며 “모질라재단 관련 기사를 보고 러스트를 처음 알았고, C++를 대체할 수 있다는 표현이 독특해 공부하고 있다”라고 설명했다. 러스트 한글 번역 작업은 우준혁 개발자가 처음 시작했다. 우준혁 개발자 외에 김재주 성균관대학교 대학원생, 안희종 카이스트 전산학부 3학년생이 적극적으로 번역 작업에 참여하고 있다. 총 참여자는 7명이다.


안희종 학생은 “로우레벨 언어 개념이나 ‘소유권’이라는 독특한 개념을 배우는 데 조금 시간이 걸렸다”라며 “튜토리얼에 있는 핵심 개념을 익히는 데 1~2주 걸렸지만 완벽히 아는 수준이 아니라 계속 공부 중”이라고 설명했다.


서상현 개발자는 “초급 개발자는 러스트를 배울 때 메모리 관련 기능이 잘 이해 안 될 수 있다”라며 “이런 부분은 혼자 고민하기보다 온라인 사용자그룹에 질문하면서 해결하길 권한다”라고 말했다.


러스트 학습시 참고할 수 있는 자료


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

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

코틀린은 안드로이드 개발자로 유명한 제이크 왓슨이 알리면서 유명세를 탔다. 제이크 왓슨은 현재 스퀘어에 근무하고 있으며, 안드로이드와 관련한 다양한 오픈소스 프로젝트에 참여했다. 국내에서도 코틀린에 관심 있는 개발자가 눈에 띈다. 허재위 뤼이드 공동설립자이자 안드로이드 개발자는 “원래 새로운 언어를 배우는 것을 좋아한다”라며 “새로운 언어는 요즘 시대에서 고민하는 문제를 해결하려다보니 꼭 실무에 새 언어를 쓰지 않아도 아이디어를 얻으려고 공부한다”라고 말했다. 김상우 VCNC 공동설립자이자 프로덕트 개발자는 “스타트업에서 일하다보니 다양한 업무를 처리해야 하고 그때마다 언어를 바꿔야 했다”라며 “지금은 새로운 언어를 받아들이는 데 부담이 없어졌다”라고 설명했다.


코틀린은 문법 자체가 간결하다. 코드 길이가 짧은 건 무조건 좋다 나쁘다라고 단정할 수는 없는 부분이지만, 코드가 간결해지면 유지보수를 조금 더 편하게 할 수 있다. 또한 자바는 보통 정해진 원칙을 엄격하게 따르면서 쓰는데, 코틀린은 좀 더 다양하게 표현을 확장할  수 있다. Rx같은 함수 프로그래밍을 할 때면 복잡한 람다식을 사용하는 경우가 많은데, 코틀린을 활용하면 람다식을 보다 간편하게 활용할 수 있다. 김상우 개발자는 “코틀린으로 작성해 기존 자바 코드보다 절반에서 최대 4분의 1로 코드를 줄인 적도 있다”라고 설명했다.


▲코틀린으로 간결하게 코드를 작성한 예(사진 : 허재위 개발자 발표 자료)


▲코틀린으로 람다를 활용한 예(세번째 사진)(사진 : 허재위 개발자 발표 자료)


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


▲코틀린으로 널타입을 확인하는 예(사진 : 허재위 개발자 발표자료)


코틀린은 새로운 언어임에도 불구하고 통합 개발 환경(IDE)도 문제없이 사용할 수 있다. 제트브레인은 ‘인텔리J’라는 IDE를 만드는 업체다. 그런 면에서 제트브레인은 IDE에서 코틀린 도구나 플러그인을 적극적으로 지원하고 있다. 인텔리J로 자바에서 코틀린으로 코드를 자동 변환할 수도 있다. 김상우 개발자는 “IDE를 이용해 기존 코드를 옮길 수 있으며, 자바와 코틀린을 함께 섞어 쓰는 것도 가능하다”라고 설명했다.


▲여러 IDE에서 코틀린을 활용할 수 있다(사진 : 코틀린 공식홈페이지)


코틀린의 아쉬운 점은 아직 성숙되지 않았다는 점이다. 그렇기 때문에 언어 문법이 조금씩 변한다. 이것은 신생 언어가 가지고 있는 숙명이기도 하다. 또 코틀린은 자바 개발자에게 익숙한 어노테이션 처리도구(Annotation Processing Tool, APT)를 완벽하게 지원하지 않는다. 제트브레인은 2015년 5월 “프리뷰 단계로 APT를 개발하는 중”이라고 밝히기도 했다.


국내에서 코틀린을 사용하는 개발자는 아직은 소수다. 허재위 개발자는 “뤼이드 내부 안드로이드 앱에서 코틀린을 활용하고 있다”라며 “문제없이 잘 돌아가고 있다”라고 말했다. 김상우 개발자는 “비트윈 앱에도 적용하려 했으나 아직 호환성 문제 때문에 보류했다”라며 “비트윈 앱은 규모가 큰 시스템이라 적용하지 못했지만, 작은 프로젝트에서는 코틀린을 활용할 수 있다고 본다”라고 설명했다.


코틀린은 국내 사용자가 별로 없어 아직 한글 자료를 찾기 쉽지 않다. 현재는 코틀린 공식 문서가 가장 좋은 참고자료다. 허재위 개발자는 “자바 경험이 있고 영어 문서를 읽는 데 부담이 없는 개발자라면 코틀린을 쉽게 이해할 수 있을 것”이라고 말했다.


코틀린 학습시 참고할 수 있는 자료


■  애플이 만든 언어로 iOS 앱 만들자, ‘스위프트’

스위프트‘는 2014년 애플이 만든 프로그래밍 언어다. 과거 iOS나 OS X을 위한 프로그램을 만들기 위해서는 ‘오브젝티브C’를 주로 이용해야 했다. 이제는 스위프트가 대안으로 떠오르고 있다. 2015년 6월 스위프트 2.0버전이 나왔으며, 2.0부터는 오픈소스 프로그래밍 언어로 전환됐다.


iOS 관련 앱을 처음 만들려는 개발자는 오브젝티브C를 공부해야 할까, 스위프트를 공부해야 할까? 정해진 정답은 없다. 개발자의 목적에 따라 선택하면 된다. 만약 오브젝티브C를 공부한다면 다양한 책, 예제코드, 활용사례를 접할 수 있는 장점이 있다. 스위프트는 공부한다면 애플이 지원하는 기술과 최근 언어 트렌드를 경험할 수 있다. iOS나 OS X 프로젝트에 함수형 언어를 하고픈 개발자라면 스위프트를 시도해보면 좋다.


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


▲스위프트 코드 예제(사진 : 김근영 개발자 블로그)


팬시라는 스타트업에서 근무하고 있는 앱 개발자이자 국내 스위프트 커뮤니티에 참여하고 있는 김영후 개발자는 “평소에도 하스켈이나 스칼라와 같은 함수형 언어에 관심이 많았는데, 애플이 비슷한 언어를 소개해 관심을 가졌다”라며 “’알람파이어‘를 포함한 다양한 오픈소스 프로젝트들이 스위프트를 사용하는 것을 알고 스위프트에 대한 관심이 더 생겼다”라고 말했다. 또한 그는 “개발 중인 앱에 오브젝티브C 코드와 스위프트를 섞어서 쓰고 있다”라며 “오브젝티브C와 여러 API를 알고 있어서인지 스위프트를 이해하는 데 두 달 정도 걸렸다”라고 설명했다.


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


단점도 있다. 스위프트는 문법이 자주 바뀌고 있어 X코드의 지원이 완벽하지 않다는 지적이 따른다. 스위프트 컴파일러도 안정화되지 않은 상태라, 프로그래밍 도중에 오류메시지를 볼 수도 있다. 스위프트 관련 책을 저술한 김 근영 블루벤터스 CEO는 “스위프트 1.0버전으로 작성한 코드를 1.1 또는 1.2로 수정하기 위해서 수많은 오류를 처리해야 했다”라며 “비슷한 규모의 오브젝티브C로 진행한 프로젝트보다 빌드 시간이 조금 더 길었다”라고 말했다.


김근영 CEO는 “처음에는 공부할 자료가 없어 애플에서 제공하는 공식 문서와 WWDC 동영상만 반복하면서  공부했다”라며 “문법을 이해하는 데 2주 정도 걸렸고 스위프트로만 작성된 앱을 만드는 데는 2달 정도 걸렸다”라고 설명했다.


▲한국에 있는 개발자들은 자원봉사 형태로 애플 스위프트 공식 문서를 번역해놓았다

  (사진 : 스위프트 언어 개발문서)


한국에선 스위프트를 적극적으로 활용하는 단계는 아니다. 김근영 대표는 “이미 오브젝티브C라는 좋은 언어가 있고 인력도 오브젝티브C에 쏠려 있어 기업에서 아직 활용 못하는 것 같다”라며 “오브젝티브C에서 스위프트로 전환하는 데 드는 시간과 비용을 투자해야 하고 유지보수 인력도 없어 도입이 더 늦어지는 것 같다”라고 설명했다. 김영후 개발자는 “국내 스타트업들이 스위프트를 준비하고 연구하는 단계에 있는 것 같다”라며 “원하든 원치 않든, 일단 준비해야 한다는 공감대는 형성된 것 같다”라고 말했다.


스위프트 학습시 참고할 수 있는 자료

※참고문헌
Timeline of programming languages , 위키백과



[출처 : http://www.bloter.net/archives/230851]