2019-11-24 작성

[Book] 프로그래밍 언어도감(1) 스크립트 언어

목차 : 스크립트 언어

  • JavaScript 🔥
  • TypeScript 🔥
  • Dart
  • Python 🔥
  • Ruby

JavaScript 🔥

  • 탄생 : 1995년
  • 주요 용도 : 웹 브라우저
  • 분류 : 절차형 객체지향형/인터프리터

DHTML & Ajax : DHTML(Dynamic HTML)에 의해서 동적으로 페이지를 변화시킬 수 있음. Ajax 비동기 방식으로 페이지 전환 없이 새로운 콘텐츠 표현 가능 (실제 사례: Google Maps JavaScript API)

프로토타입 기반 : JavaScript는 객체지향 언어이지만, 클래스 기반이 아니라 프로토타입 기반임. 기존 객체를 복제하여 새로운 객체를 생성함 (더 알아보기: JavaScript 프로토타입 이해하기)

 JSON : 텍스트 기반의 데이터 구조로 eval 함수로 평가해서 JavaScript 객체로 변환할 수 있음. XML 대신에 사용되는 경우가 많고, 많은 언어에서 지원하고 있음

다양한 프레임워크 : jQuery, AngularJS, PrototypeJS 등이 있고, 서버 측에서 실행하는 Node.js있음

AltJS : JavaScript 대신 사용되는 환경. 예를 들어, TypeScript, Haxe, Dart, CoffeeScript 등이 있음

 ECMAScript : JavaScript 표준화 사양. 브라우저별 사양을 통일하기 위함. JavaScript 컴파일러인 Babel 툴도 있음

  • 1999년 - ECMAScript 3
  • 2009년 - ECMAScript 5
  • 2015년 - ECMAScript 2015 (ES6)
  • 2016년 - ECMAScript 2016 (ES7)
  • 2017년 - ECMAScript 2017 (ES8)
  • 2018년 - ECMAScript 2018 (ES9)
  • 2019년 - ECMAScript 2019 (ES10)

TypeScript 🔥

  • 탄생 : 2012년 (Microsoft)
  • 주요 용도 : 웹 브라우저
  • 분류 : 절차형 함수형 객체지향형/트랜스파일러

✎ 정적 타이핑 : JavaScript, 다른 AltJS는 동적 타이핑 언어이지만, TypeScript는 정적 타이핑 언어임. 의도하지 않은 값이 저장되는지 실행 전에 검사할 수 있고, 대규모 프로젝트에 적합함 

 IDE 사용 가능 : Microsoft이 개발해서 Visual Studio 사용 가능 

 변환이 쉽다 : JavaScript 소스코드는 그대로 TypeScript의 소스코드로 사용할 수 있기 때문에, 기존 소스코드를 일단 그대로 살려 변수 자료형을 추가할 수도 있음

 Haxe와의 비교 : Hexe도 JavaScript 뿐만 아니라 Java, C#, PHP, Python 등으로 변환할 수 있음. 다만 현실적으로는 JavaScript로 변환해서 사용하는 경우가 많아 TypeScript 쪽이 압도적으로 인기가 높음.

 모듈 : 클래스를 그룹으로 나누어 관리할 수 있기 때문에, 대규모 개발에 유리함. CommonJS 형식이나 AMD(Asynchronous Module Definition) 형식의 모듈 지원

 AngularJS 2.0 : 프론트엔드 웹 애플리케이션 프레임워크(오픈소스). JavaScript로 작성되었으며, 버전 2부터 TypeScript가 권장되고 있음

 Playground : 온라인으로 JavaScript로 변환 내용을 확인하면서 프로그램을 수정할 수 있음 (바로가기: http://www.typescriptlang.org/play/)

Dart

  • 탄생 : 2011년 (Google)
  • 주요 용도 : 웹 브라우저, 웹앱, 모바일 앱
  • 분류 : 객체지향형/인터프리터 트랜스파일러

JavaScript와 공존 : JavaScript와 대체가 아닌 적재적소에 함께 공존하는 것을 지향하는 언어 (실제 사례: Google AdSense, AdWords, Elections, Shopping Express)

모바일 앱도 개발 가능 : Flutter 프레임워크를 사용해서 Android, iOS를 지원하는 크로스플랫폼 모바일 앱 개발 가능

 JavaScript로 변환 : DDC(Dart Dev Complier)는 Dart로 만든 소스코드를 JavaScript로 변환

2개의 실행 모드 : 프로덕션 모드, 체크 모드가 있음. 개발할 때는 체크 모드로 자료형 체크 등을 할 수 있고, 릴리스 할 때는 프로덕션 모드로 빠르게 처리할 수 있음

DartPad : 웹 브라우저에서 Dart을 실행 테스트할 수 있는 개발환경

Pub 패키지 매니저 : Dart에서 사용할 수 있는 풍부한 패키지 관리 가능. YAML 파일에서 설정을 기술하고, 커맨드 라인에서 설치 및 업데이트할 수 있음

Python 🔥

  • 탄생 : 1991년
  • 주요 용도 : 웹앱 데이터 분석, AI
  • 분류 : 절차형 함수형 객체지향형/인터프리터

데이터 사이언티스트 웹앱, 인공지능, 데이터 분석에 장점을 가진 스크립트 언어. 버전 2.x와 3.x는 일부 호환이 되지 않지만, 두 버전 모두 이용자가 많음

들여 쓰기 중요 : 블록을 표현할 때 Python처럼 들여 쓰기(인덴트)를 사용한다. "코드는 쓰는 것보다 읽는 것이 더 많다"라는 의미에서 PEP 8 코딩 가이드도 제공

다양한 구현 : 원래의 처리계인 'CPython' 말고도 'Jython', 'PyPy', 'Cython', 'IronPython' 등 다양한 구현이 있음

다양한 통계 라이브러리 : 데이터 분석과 기계학습 관련 라이브러리 많음. 특히 'NumPy', 'Pandas', 'matplotlib'이 유명함

 pip : Python 패키지 관리 시스템. 최신 Python이 기본으로 제공되어 검색, 설치, 업데이트 가능. GitHub에서 설치 가능

리스트 컴프리헨션 : 컴프리헨션은 더 파이써닉하게 파이썬을 사용한다는 것을 의미함. 리스트 컴프리헨션은 대괄호 안에 for 구문을 사용하여 리스트를 초기화 함으로써 컴프리헨션 기능을 수행할 수 있음

Django : Python으로 작성된 사용되는 오픈소스 웹 애플리케이션 프레임워크. Instagram, Pinterest 등 개발에도 사용되고 있음. (실제 사례: Django로 구축된 10개의 인기 웹 사이트

Ruby

  • 탄생 : 1995년
  • 주요 용도 : 웹앱, 교육
  • 분류 : 절차형 함수형 객체지향형/인터프리터

즐기기 위해 : 즐기기 위한 목적으로 개발된 프로그래밍 언어.

 모든 것이 객체 : 객체지향 언어라도 다른 언어는 대부분 정수 같은 원시적인 형태는 객체가 아닌데 반해, Ruby는 Smalltalk와 같은 객체지향 언어

DSL로 이용이 많다 : DSL(도메인 특화 언어)은 특정 작업을 위해 설계된 언어. Ruby는 내부 DSL에 적합하다고 해서 Chef와 Vagrant 등 다양한 프로그램 설정 파일에 사용되고 있음.

 Ruby on Rails : 웹 애플리케이션 프레임워크. '설정보다 규약' (CoC: Convention over Configuration)이라는 말이 있을 정도로 수동으로 해야 하는 설정이 적음

gem : Ruby 패키지 관리 시스템인 'RubyGems'에서 사용되는 라이브러리. gem 커맨드로 패키지 빌드와 설치 가능

YARV : Yet Another Ruby VM. Ruby를 빠르게 실행하기 위한 처리계로 개발되었고, Ruby 1.9 이후는 Ruby 본체에 내장되어 있음