소개
안녕하세요. 환영해요. 모두 잘 지내고 있길 바라요. Jurasic July 동안 오래되고 영향력 있는 언어들을 탐험하면서 즐거운 시간을 보냈길 바라요. 이제 2023년의 8번째 달, 그리고 일곱 번째 테마의 달인 Appy August로 넘어가요.
앱이란 무엇을 말할까요?
여러 가지를 의미할 수 있어요:
- 웹 애플리케이션, 요즘 우리 일상의 핵심이죠
- 휴대폰이나 태블릿에서 실행되는 것과 같은 네이티브 앱
- Windows, Mac, Linux 운영체제에서 직접 실행되는 데스크톱 앱
- 특정 도메인에 특화된 애플리케이션
- 비즈니스 애플리케이션
- 그 외에도 많아요!
그럼 어떤 언어들을 다룰까요?
무려 14개 언어를 살펴봐요: ABAP, CoffeeScript, Dart, Delphi, Elm, Java, JavaScript, Kotlin, Objective-C, PHP, PureScript, ReasonML, Swift, TypeScript예요.
배지
이번 달에 이 언어들 중 하나로 연습 문제 5개를 완료하면 배지를 받아요. 그리고 연간 배지를 받으려면 다음을 완료해야 해요:
- 애너그램: 단어와 가능한 애너그램 목록이 주어지면, 그 단어의 애너그램을 찾아요
- 전화번호: 전화번호를 정리해요
- 삼각형: 삼각형을 분류해요
- RNA 전사: DNA 서열을 RNA 상보 서열로 변환해요
- 스크래블 점수: 단어가 주어지면 스크래블 점수를 계산해요
개요
ABAP
- 1980년대에 SAP SE가 개발했고, 약어가 무엇을 뜻했는지 보면 설계 목표가 분명해져요: Allgemeiner Berichts-Aufbereitungs-Prozessor, 독일어로 "일반 보고서 준비 처리기(general report preparation processor)"라는 뜻이에요. 나중에 ABAP은 더 범용적으로 쓰이게 되었고, 이를 반영해 약어가 Advanced Business Application Programming으로 바뀌었어요
- 강타입 정적 타입 언어예요
- 다중 패러다임: 명령형과 객체 지향 프로그래밍을 지원해요
- 바이트코드로 컴파일돼요. 흥미롭게도 소스 코드가 데이터베이스 안에 저장돼요
- 모든 코드는 관계형 데이터베이스와 하나 이상의 애플리케이션 서버로 구성된 SAP 시스템의 맥락에서 실행돼요
- 독점 기술이고 클로즈드 소스예요. 다만 우리 메인테이너 중 한 명이 훌륭한 오픈 소스 재구현을 만들어 두었어요
- 금융, 자재 관리, 회계, 경영 같은 비즈니스 애플리케이션에 사용돼요. 전 세계에 고객을 두고 있고, Apple, Amazon, Walmart 같은 큰 이름들이 많아요
왜 좋을까요
- 꾸준히 발전하고, 정기적으로 새 기능이 추가돼요
- 신뢰할 수 있어요: 수십 년의 경험이 뒷받침하는 안정적인 기능이에요
- 방대한 표준 라이브러리
두드러지는 특징
- SAP 시스템 및 데이터베이스와 매끄럽게 통합되고, 다른 많은 시스템과도 통합돼요
- ABAP Dictionary에는 테이블, 뷰, 구조를 포함한 SAP 시스템 데이터의 모든 메타데이터가 들어 있어요. 이 딕셔너리의 타입으로 변수를 정적으로 타입 지정할 수 있고, 타입이 테이블인 경우에도 가능해요
- ABAP Workbench는 ABAP 시스템의 일부로, 프로그램 편집을 위한 도구 모음을 담고 있어요. 화면 설계도 포함돼요
CoffeeScript
- 이 언어는 2009년에 Jeremy Ashkenas가 처음 커밋했고, 첫 커밋 메시지는 "수수께끼 언어의 첫 커밋"이었어요
- 동적 타입이고 다중 패러다임(객체 지향, 명령형, 함수형, 프로토타입 기반)이에요
- JavaScript로 컴파일돼요(_트랜스파일링_이라고 해요). CoffeeScript의 황금률은 "그냥 JavaScript일 뿐"이에요. 성공한 최초의 "JS로 트랜스파일" 언어 중 하나예요
- 당시 JS를 다루던 사람들이 어려워하던 몇 가지 문제(예: "this" 바인딩이 다르게 동작하는 것, 클래스가 지원되지 않는 것)가 CoffeeScript에는 없어서 인기를 얻었어요. Ruby on Rails 3.1 버전부터 포함되었어요.
- 2017년에 2.0 버전이 나왔고, 최신 JavaScript 표준과 어깨를 나란히 하는 것이 목표였어요. 이 언어는 1년에 한 번 정도 업데이트돼요.
- 언어 컴파일러는 원래 Ruby로 작성되었지만, 2010년에 CoffeeScript로 작성된 자가 호스팅 컴파일러로 대체되었어요(컴파일러는 NodeJS에 의존하지 않고 브라우저에서 바로 실행될 수 있어요)
- CoffeeScript는 JavaScript가 특정 기능(람다 화살표 문법, 클래스)을 도입하도록 영감을 준 점에서 영향력이 있었어요
- 예전에 Dropbox와 Rails에서 사용되었어요
왜 좋을까요
- Python, Ruby, Haskell에서 영감을 받은 깔끔하고 간결한 문법이에요. JavaScript보다 장황하지 않고, 괄호와 중괄호를 많이 없앴어요. 부분적으로는 유의미한 들여쓰기(공백이 중요해요)를 사용하기 때문이에요
- 단순화된 의미론이에요. 예를 들어 let, var, const가 존재하지 않아 혼란이 없고, ==는 ===(엄격한 동등)으로 트랜스파일되며, 함수 바인딩이 흔한 "this" 실수를 막아줘요
- 표현식 기반이라 if 표현식의 결과를 변수에 할당할 수 있어요
- 문법적 설탕이 많아요. 예를 들어 this 대신 @를 쓰고, true 대신 yes/on을 쓸 수 있고, //는 내림 나눗셈에, this 대신 @를 쓰는 등 훨씬 많아요
두드러지는 특징
- 소스와 생성된 코드가 일대일로 대응하는, 깔끔하고 사람이 읽을 수 있는 JavaScript로 컴파일돼요.
- JavaScript와의 상호 운용성이 뛰어나요: CoffeeScript에서 JS로 작성된 코드를 쉽게 사용할 수 있어요(그 반대도 마찬가지예요). 어떤 JS 라이브러리든 사용할 수 있어요
- JavaScript에 없거나 없었던 기능을 추가해요: 리스트 컴프리헨션, 문자열 보간, 존재 연산자(?), 연쇄 비교
- 작은 언어이고, 컴파일러는 약 500kb예요(압축하면 100kb)
Dart
- Google의 Lars Bak과 Kasper Lund가 설계했어요
- 2011년에 첫 릴리스
- 목표는 UI를 만드는 데 특히 적합한 빠르고 생산적인 언어를 만드는 것이었어요
- 정적 타입
- 다중 패러다임: 주로 객체 지향이지만 함수형과 명령형도 지원해요
- 인터프리트와 JIT 컴파일이 모두 가능해요
- 주로 앱을 만드는 데 쓰이지만 backend도 만들 수 있어요
왜 좋을까요
- 익숙한 문법 덕분에 배우기 쉬워요
- 현대적인 타입 시스템: 타입 추론, 패턴 매칭, async/await
- 훌륭한 문서
- 건전한 null 안전성 시스템을 통한 안전성: 더 이상 null 포인터 예외가 없어요
- 좋은 도구와 다양한 IDE 지원. 빠른 핫 리로드처럼 짧은 피드백 루프에 최적화되어 있어요
- 많은 라이브러리가 있는 성장하는 생태계
두드러지는 특징
- JS, 네이티브로 컴파일할 수 있고, Swift와 Kotlin으로도 컴파일할 수 있어 모바일 앱에 좋아요.
- Flutter 라이브러리로 모바일, 웹, 데스크톱, 임베디드 앱을 빠르게 만들 수 있어요. 한 번 작성하면 여러 플랫폼에서 실행돼요
- async/await, isolate(가벼운 동시성 실행 구성 요소), future 등을 지원하는 뛰어난 동시성 지원
Delphi
- Delphi는 Borland가 개발해 1995년에 출시했어요.
- Object Pascal 프로그래밍 언어이고, C#의 주요 설계자 중 한 명인 Anders Hejlsberg가 개발했어요
- 강타입 정적 타입
- 네이티브 코드로 컴파일돼요
- 다중 패러다임: 대부분 객체 지향이지만 명령형, 선언형, 이벤트 기반도 지원해요
- 비즈니스 애플리케이션, GUI, 학교(프로그래밍 교육)에서 사용돼요
왜 좋을까요
- 배우기 쉬워요. Object Pascal은 Pascal의 단순함과 명료함을 객체 지향 프로그래밍 기능과 결합해 코드를 더 쉽게 작성하고 유지보수할 수 있게 해줘요
- 통합 개발 환경(IDE): Delphi IDE는 개발 과정을 간소화하는 사용자 친화적이고 기능이 풍부한 환경을 제공해요. 코드 탐색, 디버깅 도구, 코드 완성 등 개발을 더 효율적으로 만들어 주는 생산성 기능을 제공해요.
- 안정성: 1990년대 초부터 존재하며, 강력한 하위 호환성을 포함해 신뢰할 수 있고 안정적인 개발 도구이자 언어라는 역사를 가지고 있어요. 이전 버전의 Delphi로 작성된 코드도 최소한의 조정으로 최신 버전에서 여전히 컴파일하고 실행할 수 있어요.
- 크로스 플랫폼 지원: Delphi는 Windows를 넘어 기능을 확장했고, macOS, iOS, Android 등 여러 운영체제를 대상으로 할 수 있는 크로스 플랫폼 개발 지원을 제공해요. 이를 통해 더 넓은 사용자를 위한 앱을 만들 수 있고 프로젝트의 도달 범위가 넓어져요.
- 강력한 커뮤니티와 지원: Delphi에는 라이브러리, 도구, 리소스를 생태계에 기여하는 헌신적이고 활발한 개발자 커뮤니티가 있어요.
두드러지는 특징
- 고성능 실행 파일: Delphi 애플리케이션은 속도와 성능으로 유명해요. Delphi 컴파일러는 고도로 최적화된 네이티브 실행 파일을 만들어 내고, 이는 실시간 처리나 무거운 계산 작업이 필요한 특정 유형의 애플리케이션에 매우 중요할 수 있어요.
- 신속한 애플리케이션 개발(RAD) 환경: 시각적 드래그 앤 드롭 디자인 도구로 개발자가 최소한의 노력으로 사용자 인터페이스를 만들고 기능에 연결할 수 있어 개발 과정이 빨라져요.
- 컴포넌트 기반 아키텍처: 애플리케이션을 만들기 위해 재사용 가능한 컴포넌트를 짓는 컴포넌트 기반 아키텍처에 의존해요. 코드 재사용이 쉬워지고 개발 시간이 줄어들어요.
- 이벤트 처리: Delphi는 내장 이벤트 모델을 사용해 개발자가 사용자 동작과 다른 이벤트에 쉽게 응답할 수 있어요. 이벤트 처리는 사용자 입력이나 시스템 이벤트를 포착하고 적절히 응답하는 과정을 단순화해요.
- 데이터베이스 연결: Delphi는 다양한 데이터베이스 시스템과 매끄럽게 통합할 수 있는 네이티브 데이터베이스 접근 컴포넌트를 제공해요. 이 내장 지원은 데이터베이스 기반 애플리케이션 개발을 단순화해요.
Elm
- 이 언어는 Evan Czaplicki가 졸업 논문을 위해 만들었고 2012년에 출시되었어요
- 처음에는 GUI를 위한 함수형 반응형 프로그래밍(FRP)(시그널을 사용한 FRP)을 다뤘지만, 2017년에 FRP는 TEA(The Elm Architecture)로 대체되며 버려졌어요
- 정적이고 강력한 타입의 함수형 언어
- Haskell에서 영감을 받은 문법
- 오픈 소스 언어지만 매우 독선적이고, 개발 방식은 Evan이 무언가를 공개하기 전에 오랜 기간 깊이 몰두하는 작업을 포함해요. 그래서 PR이 아주 오랫동안 병합되지 않을 수 있고 프로젝트가 정체된 것처럼 보일 수 있지만, 그저 Evan의 작업 스타일일 뿐이에요.
- 웹사이트, 예를 들어 NoRedInk, Vendr, Rakuten, Brilliant에서 사용돼요
왜 좋을까요
- 아주 작은 언어이고, 정적 타입 함수형 언어인 ML 계열 중 배우기 가장 쉬운 언어 중 하나예요. 그래서 함수형 프로그래밍을 가르치기에 거의 최적이에요.
- 컴파일러 오류가 어디서든 찾을 수 있는 것 중 가장 친절하고 도움이 돼요.
- 안정적인 언어: 마지막 릴리스는 2019년이에요
- 생태계의 패키지는 적지만 품질이 높아요.
- elm-review가 이끄는 강력한 린팅 생태계(Exercism Elm 트랙의 분석기를 구동해요).
두드러지는 특징
- Elm 아키텍처(TEA)가 모든 Elm 앱을 뒷받침하므로, 처음 보는 Elm 애플리케이션을 검토하기가 아주 쉬워요.
- 런타임 예외가 없어요! 몇 가지를 빼고는요.
- 의존성을 업데이트할 때 깨지지 않아요, 시맨틱 버전 관리를 컴파일러가 강제해요.
- 컴파일되면 작동해요(논리 오류를 빼고는요). 그리고 한번 익숙해지면 다른 언어로 돌아가기가 아주 어려워요.
- Matthew Griffith의 "elm-ui"는 스타일과 레이아웃에서도 "컴파일되면 작동해요"를 가능하게 해줘요, CSS가 필요 없어요.
- 풀스택 웹 앱: Lamdera는 Elm을 사용해 풀스택 웹 앱을 만드는 스핀오프로, frontend와 backend 사이에 접착 코드가 전혀 필요 없어요.
Java
- Sun Microsystems의 James Gosling이 개발해 1995년에 출시했어요.
- 다섯 가지 원래 목표:
- 단순하고, 객체 지향적이며, 친숙할 것.
- 견고하고 안전할 것.
- 아키텍처 중립적이고 이식성이 있을 것.
- 고성능일 것.
- 인터프리트되고, 스레드 기반이며, 동적일 것.
- 강타입 정적 타입
- 바이트코드로 컴파일돼요(네이티브 코드도 작업 중이에요)
- 다중 패러다임: 명령형, 객체 지향, 함수형
- 이 언어와 가상 머신에는 공식 명세가 있으므로 여러 구현도 있어요(예: OpenJDK JVM과 Oracle의 Hotspot VM)
- 웹사이트부터 임베디드 시스템까지, 앱부터 데이터베이스까지 방대한 양의 소프트웨어에서 사용돼요
왜 좋을까요
- (거의) 어디서나 실행돼요(Java 업데이터가 기꺼이 상기시켜 주듯이 ;))
- 범용적이에요: 앱, 웹사이트, 임베디드 시스템을 포함해 거의 모든 작업에 사용할 수 있어요
- Kotlin, Groovy, Scala, Clojure 같은 다른 JVM 언어와의 상호 운용성
- IDE와 빌드 시스템 같은 다른 도구 모두를 위한 훌륭한 도구
두드러지는 특징
- JVM은 지속적으로 개선되는 성숙하고 안정적이며 매우 성능이 좋은 가상 머신이에요
- 방대한 생태계와 엄청난 수의 사용 가능한 라이브러리. 그 라이브러리들은 Java처럼 성숙하고 안정적이며 기능이 풍부해요
- 발전 중: 언어와 런타임은 계속 발전하고 있고, 언어를 더 현대적으로 만들고 사람들의 불만(예: 상용구와 장황함의 감소)을 해결하기 위한 정기 업데이트가 있어요. 런타임의 경우 더 발전시키기 위한 새 프로젝트가 정기적으로 시작돼요(예: 가벼운 동시성 구성 요소를 위한 project loom과 GraalVM을 통한 네이티브 컴파일)
JavaScript
- Brendan Eich는 웹 페이지를 동적으로 만들 언어를 제공하기 위해 1995년 Netscape에 채용되었어요. 첫 프로토타입은 10일 만에 만들어졌다고 유명해요
- 1997년에 ECMAScript로 표준화되었어요
- 동적 타입이고 약타입
- 예전에는 순수하게 인터프리트되었지만, 오늘날에는 종종 JIT 컴파일돼요
- 다중 패러다임: 프로토타입 기반(꽤 드물어요)이지만 객체 지향, 명령형, 함수형도 지원해요
- 오늘날의 성공적인 웹을 만드는 데 엄청난 영향을 미쳤어요. 예를 들어 AJAX는 상호작용성을 추가하는 데 매우 유용했어요. 브라우저에 지원이 내장된 유일한 프로그래밍 언어라서 웹 개발의 사실상 표준이에요
- 아마 오늘날 가장 많이 쓰이는 언어일 거예요
- backend, frontend, 스크립트, 명령줄 도구에 사용돼요
왜 좋을까요
- 범용적이에요: backend, frontend, 스크립트, 명령줄 도구 등 많은 작업에 사용할 수 있어요. 웹에 쓰이는 많은 도구가 JavaScript로 작성되어 있어요(nodejs에서 실행돼요)
- 런타임(예: V8)은 고도로 최적화되어 있고, 언어가 매우 동적임에도 성능이 아주 좋을 수 있어요
- 상대적으로 작은 언어라 배우기가 비교적 쉬워요. 브라우저에서 실행할 수 있다는 점이 특히 좋아요, 배우면서 시각적 피드백을 받을 수 있으니까요
- 명세가 자주 업데이트되어 async/await, 문자열 보간 같은 새 기능이 도입돼요. 도구 쪽에서도 혁신이 많아요, JavaScript 코드베이스를 다루는 데 도움이 되도록 deno, esbuild, bun.js 같은 최신 도구가 개발되고 있어요
- JSON 지원이 최고 수준이에요, JSON이 JavaScript Object Notation의 약자라는 사실이 그 증거죠
- 이벤트 기반의 논블로킹 코드에 좋도록 설계되었어요
두드러지는 특징
- 거대한 생태계. 엄청난 수의 라이브러리를 사용할 수 있고(2022년 9월 기준 210만 개의 패키지), JavaScript를 대상으로 하는 다른 많은 언어도 있어요
- Windows부터 Apple까지, Raspberry Pi부터 휴대폰까지, 웹 서버부터 서버리스 플랫폼까지 대부분의 플랫폼과 하드웨어에서 실행돼요. 웹 브라우저에는 네이티브 지원이 내장되어 있어서 런타임을 설치할 필요가 없어요.
- 웹 개발에 이상적이에요, 선택할 수 있는 많은 프레임워크(React, Vue, Angular)와 웹 애플리케이션 빌드를 돕는 많은 도구(예: eslint, parcel)가 있어요
- 아이소모픽하게 사용할 수 있어요, 즉 같은 언어(그리고 코드베이스)를 backend와 frontend 모두에 사용할 수 있어요. 유지보수가 쉬워지고 frontend와 backend 사이의 코드 재사용이 가능해져요
- 엄청난 인기는 곧 배울 자료(영상, 블로그, 강의)가 많고 상호작용할 거대한 커뮤니티가 있다는 뜻이에요
Kotlin
- IDE(예: IntelliJ, CLion, GoLand, Rider)로 유명한 JetBrains가 2010년에 개발했어요
- JetBrains의 제품 대부분은 Java로 작성되었지만, 상용구 코드를 줄이고 개발 속도를 높이며 그들이 아쉬워하던 몇 가지 기능을 지원하는 JVM 언어를 원했어요. Scala에 이런 기능이 있었지만 컴파일이 너무 느리다는 것이 밝혀졌어요. 그래서 Project Kotlin이 시작되었어요.
- 강타입 정적 타입
- 다중 패러다임: 명령형, 객체 지향, 함수형, 선언형
- 기본적으로 JVM 바이트코드로 컴파일되지만, JS와 네이티브로도 컴파일할 수 있어요(iOS 기기처럼 가상 머신이 불가능하거나 바람직하지 않은 플랫폼에 유용해요)
- 2019년에 Google이 Android 앱을 작성하는 선호 언어로 지정했어요
- 웹사이트, 앱(주로 Android), 심지어 전체 IDE(앞서 언급한 IDE들)를 만드는 데 사용돼요
왜 좋을까요
- 범용적이에요: 앱과 웹사이트를 포함해 거의 모든 작업에 사용할 수 있어요. Google은 2019년에 Kotlin을 Android 앱 개발의 선호 언어로 정했어요
- JVM에서 실행되므로 그 이점이 모두 적용돼요: 성숙하고 성능이 뛰어난 VM과 사용 가능한 엄청난 수의 라이브러리
- 검사 예외, null 안전성, 장황함 등 사람들이 Java에 가질 수 있는 많은 문제를 완화해줘요
- 현대적인 언어: 고급 타입 추론, 표현식 기반, 불변성, 패턴 매칭, 코루틴, 채널
- 훌륭한 도구(IDE 자체가 이 언어로 작성되었다면 당연한 일이죠 :)
두드러지는 특징
- 생산적이에요: Kotlin은 다른 언어의 가장 좋은 부분을 채택해 하나의 일관되고 생산적인 언어로 빚어내고, 어떤 경우에는 원본을 더 개선하기까지 해요(예: 지역 확장 메서드)
- 코루틴: 많은 언어에서 async/await가 언어에 내장되어 있지만, Kotlin에서는 언어의 코루틴 기능을 사용해 라이브러리로 구현돼요. 코루틴은 중단 함수를 다루는 방법으로, future와 promise보다 비동기 작업을 위한 더 안전하고 오류가 적은 추상화를 제공해요.
- 뛰어난 동시성: async/await, 채널, 불변성이 모두 훌륭한 동시성을 얻는 데 도움이 돼요
- Compose 멀티플랫폼은 선언적 문법을 사용해 같은 코드베이스에서 공유 UI를 만들 수 있게 해줘요
Objective-C
- 1980년대 초에 Brad Cox와 Tom Love가 처음 개발했고, NeXT가 NeXTSTEP 운영체제를 위해 선택했어요. Apple macOS가 NeXTSTEP에서 직접 이어졌기 때문에 Apple 소프트웨어의 선택 언어가 되었어요
- SmallTalk의 객체 지향 아이디어를 C와 결합하도록 설계되었고, 메시지 전달을 핵심 객체 지향 구성 요소로 사용해요
- C의 상위 집합이라, 모든 C 코드가 유효한 Objective-C 코드이고 둘을 같은 코드베이스에서 결합할 수 있어요
- 정적 및 동적 타입
- 컴파일됨
- 2014년 Swift가 등장할 때까지 macOS와 iOS 애플리케이션을 작성하는 표준 언어였어요
- macOS와 iOS 앱에 사용돼요
왜 좋을까요
- C와 객체 지향 기능의 혼합은 정말 강력할 수 있어요
- 얇은 런타임이라 리소스 효율이 좋아요
- 가벼운 클래스 문법
- 빠른 열거는 C보다 쉬운
for문을 가능하게 해줘요 - 강력한 하위 호환성
두드러지는 특징
- 자동 참조 카운팅(ARC)을 지원해요, 객체가 더 이상 참조되지 않을 때 메모리를 자동으로 해제해서 메모리 관리를 쉽게 해줘요
- 동적 런타임은 메서드 스위즐링(셀렉터의 동작을 동적으로 바꾸는 것(몽키 패칭처럼)), 리플렉션, 메시지 포워딩(옵서버나 프록시 패턴에 좋아요)을 가능하게 해줘요
- 프로토콜과 인터페이스는 C에 인터페이스 기능을 가져다주고, 카테고리 인터페이스로 기존 타입을 확장할 수도 있어요
PHP
- Rasmus Lerdorf가 1993년에 개발하고 구현해 1995년에 처음 출시했어요
- 이름은 재귀 약어로 PHP: Hypertext Preprocessor예요
- 동적이고 약타입이며, 런타임 강타입 단언을 점진적으로 추가할 수 있는 옵션이 있어요
- 다중 패러다임: 명령형, 함수형, 객체 지향, 절차적, 반영적
- 인터프리트되거나 JIT 컴파일돼요
- 최초의 서버 측 렌더링 플랫폼
- 웹사이트(Facebook, Wikipedia 등 다수)와 많은 콘텐츠 관리 시스템(Wordpress, JOOMLA)에 사용돼요.
왜 좋을까요
- 어디에나 있어요. PHP는 특정 플랫폼과 무관하게 모든 웹사이트의 77.4%에서 사용돼요^1
- 다른 확립된 프로그래밍 언어인 java, javascript, c와 비슷한 단순한 문법이라 배우기 쉬워요
- 범용적이에요. 작은 웹 스크립트부터 기업이 운영하는 대규모 서버 측 애플리케이션까지 다양한 용도로 사용할 수 있어요.
- 널리 채택되어 매우 확립되어 있어요. 많은 학습 자료, 프레임워크, 라이브러리가 있어요.
- 강력한 데이터베이스 지원
- 여전히 활발히 개발 중이고 현대적인 기능을 내놓고 있어요
- 크로스 플랫폼. Windows, Mac, Linux, Unix 모든 곳에서 실행돼요
- 오픈 소스이고 무료예요
두드러지는 특징
- 실행과 배포가 간단해요. 빌드 체인이 없어요. 컴파일러도 없어요.
- 점진적 타입 시스템. 필요한 곳에 타입을 추가하고, 개발의 일부를 단순화하기 위해 동적 타입을 사용해요.
- 빠른 프로토타이핑. 아이디어를 테스트할 웹 페이지를 만들어 자신의 컴퓨터에서 실행해요.
PureScript
- Phil Freeman이 설계했고 2013년에 첫 버전이 출시되었어요
- 그는 Haskell을 JavaScript로 트랜스파일하려는 다른 시도들에 만족하지 못해서 PureScript 작업을 시작했어요
- 강타입 정적 타입
- JS로 컴파일돼요
- 순수 함수형 언어
- Haskell에서 영감을 받은 문법과 기능
- 웹 애플리케이션을 만드는 데 쓰이지만, Electron을 통해 서버 측 앱이나 데스크톱 애플리케이션도 만들 수 있어요
왜 좋을까요
- Haskell을 훌륭하게 만드는 많은 점을 공유해요:
- 강력하고 뛰어난 타입 시스템: 대수적 데이터 타입, 타입 클래스, 고차 종류 타입(higher-kinded types)
- 표현력이 좋아요: 패턴 매칭, 타입 추론
- 안전성: null이 없고, 불변 타입
- 순수 함수형: 부수 효과가 타입 시스템에 인코딩돼요
- JSON을 타입으로 타입 안전하게 쉽게 디코딩/인코딩할 수 있어요
- 사람이 읽을 수 있는 JavaScript로 컴파일돼요
- 좋은 도구
두드러지는 특징
- 함수형 코어는 런타임 오류 없는 타입 안전한 웹 애플리케이션에 완벽해요
- 뛰어난 JS 상호 운용성
- 효율적인 JS로 컴파일돼요
ReasonML
- Facebook의 Jordan Walke가 만들었고 2016년에 첫 버전이 출시되었어요
- OCaml을 기반으로 하지만 특이점을 제거했고 JS 상호 운용성을 위해 설계되었어요
- 정적 타입의 함수형 언어
- 컴파일됨
- 웹사이트를 만드는 데 사용돼요(예: Facebook에서)
왜 좋을까요
- OCaml의 모든 장점을 웹 환경에서 누릴 수 있어요:
- 강력한 타입 시스템: 모든 값이 복잡한 타입보다 선호되는 더 단순한 타입(레코드, 변형, 옵션 등)으로 타입 지정돼요. 더 이상 undefined 오류가 없어 신뢰성이 향상돼요
- 표현력이 좋아요: 패턴 매칭, 타입 추론, 구조 분해
- 안전성: null이 없고, 기본적으로 불변
- 사람이 읽을 수 있는 JavaScript로 컴파일돼요
- OCaml로 컴파일할 수 있고(그 반대도), 이는 전체 OCaml 생태계를 사용할 수 있다는 뜻이에요(예: 네이티브 바이너리로 컴파일)
두드러지는 특징
- ReasonML의 컴파일 시간이 아주 빨라서 반복 주기가 빨라요.
- 뛰어난 JS 상호 운용성, ReasonML 코드에서 JS를 사용하는 것과 ReasonML을 JS로 내보내는 것 모두요. TS 타입을 생성할 수도 있어요. C와도 상호 운용할 수 있어요. JSX 같은 문법도 지원해요
Swift
- Swift의 개발은 Chris Lattner가 2010년에 시작했고, 2014년 WWDC 행사에서 전 세계에 발표되었어요.
- 목표는 80년대 초 이후 큰 변화가 없었던 Apple의 오래된 프로그래밍 언어 Objective-C를 새롭고 현대적인 언어로 대체하는 것이었어요. Objective-C의 상당 부분과 상호 운용하도록 설계되었어요.
- 강타입 정적 타입
- 컴파일되며, 기계어로의 컴파일을 LLVM이 처리해요(예: Rust처럼)
- 다중 패러다임: 함수형, 객체 지향, 명령형, 선언형
- 원래 독점 소프트웨어였지만 2015년에 오픈 소스가 되었어요
- 주로 모바일과 데스크톱 앱에 쓰이지만 backend와 서버리스 환경에도 사용돼요
왜 좋을까요
- 현대적인 언어: 타입 추론, 패턴 매칭, 대수적 데이터 타입, 유니코드 문자열
- 생산적이에요: Swift는 다른 언어(Rust, Python, C#, Ruby 등)의 가장 좋은 부분을 채택해 하나의 일관되고 생산적인 언어로 빚어내요
- 안전해요: 포인터가 노출되지 않고, null 포인터 예외를 막는 옵셔널 타입이 있으며, 명시적 오류 처리와 ARC(자동 참조 카운팅)를 통한 자동 메모리 관리가 있어요
- 정기적으로 업데이트돼요. 초기에는 Apple이 잘 작동하지 않는 것으로 드러난 것들에 대해 과감히 호환성을 깨는 변경을 도입하는 것을 두려워하지 않았어요. 이는 "짐"이 쌓이는 것을 막아줘요. 보통 코드 마이그레이션을 돕는 도구가 제공돼요. Swift 5부터 애플리케이션 바이너리 인터페이스(ABI)가 안정적이에요
- Objective-C와 달리 Swift는 모든 주요 플랫폼(macOS, Windows, Linux)에서 실행돼요
두드러지는 특징
- 빨라요. 효율적인 기계어로 컴파일되어 빠르게 실행돼요
- Objective-C와 매끄럽게 상호 운용되고, C와 C++와도 잘 상호 운용돼요
- 큰 커뮤니티와 사용 가능한 많은 훌륭한 자료
TypeScript
- JS로 대규모 애플리케이션을 개발할 때의 불만에 대한 대응으로 Microsoft에서 만들었어요. 설계자 중 한 명은 C#의 수석 설계자이자 Delphi와 Turbo Pascal의 창시자인 Anders Hejlsberg였어요
- 첫 버전은 2012년에 출시되었어요
- 다중 패러다임: 함수형, 프로토타입 기반, 명령형, 객체 지향, 제네릭
- 점진적 타입과 덕 타이핑을 사용해요
- 컴파일됨(JS로)
- 웹사이트, frontend와 backend 모두, 스크립트, 명령줄 도구에 사용돼요
왜 좋을까요
- 강력하고 유연한 타입 시스템: 유니언 타입, 리터럴 타입, 튜플. 기본적으로 JS 코드에서 쓸 수 있는 모든 패턴을 TS에서 타입 안전한 방식으로 표현할 수 있어요. 타입 시스템이 너무 강력해서 심지어 튜링 완전하기까지 해요
- JS의 상위 집합이라 JS 코드베이스에 점진적으로 도입할 수 있어요
- 두 세계의 장점을 결합해요: 동적 타입과 정적 타입
- 인기가 빠르게 성장하고 있고, 많은 도구가 TypeScript 타입을 제공하거나 TypeScript로 전환되고 있어요. 사용할 수 있는 자료도 많아요
- 언어가 정기적으로 업데이트되고, 다가올 ECMAScript 기능을 일찍 채택해요
두드러지는 특징
- 향상된 안전성과 정확성: 정적 타입은 JS에서 흔히 저지르는 여러 부류의 오류를 없앨 수 있어요
- JS와 매끄럽게 상호 운용돼요. JS 코드를 타입 안전한 방식으로 다루기 위해 사용자 정의 타입 정의를 추가할 수 있어요. 사용자 정의 타입 정의가 많은 수에 대해 제공돼요
- 훌륭한 도구/IDE 지원. 타입 주석, 코드 완성, 심지어 안전한 대규모 리팩터링까지 많은 IDE에서 사용할 수 있어요
- JS 생태계에서 실행되는 모든 이점을 누려요: 엄청난 수의 패키지, 많은 도구, 큰 커뮤니티 등
무엇을 시도해 볼까요?
- 네이티브 앱을 만들고 싶다면 Dart, Delphi, Java, Kotlin, Swift가 좋은 선택이에요. 그렇긴 해도 JS로 컴파일되는 다른 언어들도 네이티브 앱을 만드는 데 사용할 수 있어요. iOS/macOS 앱을 만드는 공식 언어는 Swift이고, Android 앱은 Kotlin이라는 점을 기억해 둘 만해요
- 웹 앱을 만들고 싶다면 CoffeeScript, Dart, Elm, Java, JavaScript, Kotlin, PHP, PureScript, ReasonML, TypeScript가 좋아요
- 함수형 프로그래밍에 관심이 있다면 Elm, PureScript, ReasonML이 자연스러운 선택이고, CoffeeScript, Dart, Java, JavaScript, Kotlin, Swift, TypeScript도 함수형 프로그래밍을 지원해요
- 객체 지향 프로그래밍에는 ABAP, Dart, Delphi, Java, Kotlin, Objective-C, PHP, Swift가 논리적인 후보이고, CoffeeScript, JavaScript, TypeScript도 이 패러다임을 지원해요
- 비즈니스 애플리케이션 작성에 관심이 있다면 ABAP과 Delphi가 딱이에요
Translation missing: ko.number.nth.ordinalized Aug 2023
·
유용했나요?
게시자
Erik Schierboom