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

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

목차: 스크립트 언어

JavaScript

ActionScript

CoffeeScript

Dart

TypeScript

Perl

Python

Ruby

PHP

JavaScript 🔥

탄생 : 1995년

주요 용도 : 웹 브라우저

분류 : 절차형 객체지향형/인터프리터

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

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

✎ JSON : JavaScript Object Notation. 텍스트 기반의 데이터 구조로 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)

ActionScript

탄생 : 2000년 (Adode Systems)

주요 용도 : 플래시 앱

분류 : 절차형 객체지향형/컴파일러

✎ 뛰어난 멀티미디어 : Adobe Flash에서 사용되는 멀티미디어용 스크립트 언어로, 음성이나 영상 같은 애니메이션을 사용한 콘텐츠 제작에 적합하다.

✎ 환경에 의존하지 않음 : Flash를 사용하면 웹 브라우저에서 동적인 콘텐츠를 동일하게 재생할 수 있다.

✎ 사용률이 줄고 있음 : 웹 브라우저에서 Plugin을 실행해야 하는 단점 대문에 사용이 점점 줄어들고 있다.

CoffeeScript

탄생 : 2009년

주요 용도 : 웹 브라우저

분류 : 절차형 함수형/트랜스파일러

✎ 적은 코드 양 : JavaScript보다 코드량이 적고 읽기 쉬운 코드이다. JavaScript 프로토타입 기반의 객체지향을 의식하지 않고 사용할 수 있다.

✎ 들여 쓰기 중요 : 블록을 표현할 때 Python처럼 들여 쓰기(인덴트)를 사용한다. 끝에 세미클론을 사용할 필요가 없다.

✎ Ruby on Rails에서 도입이 쉬움 : RoR에서는 'Asset Pipeline' 구조가 있어 CoffeeScript의 소스코드를 배치하는 것만으로 동적 컴파일을 할 수 있다.

✎ Backbone.js나 Underscore.js를 만든 개발자 : Backbone.js는 SPA 용의 가벼운 프레임워크, Underscore.js는 JavsScript 라이브러리이다. 둘 다 CoffeeScript 개발자인 Jeremy Ashkenas이 개발하였다.

✎ 소스 맵: 소스코드를 변환하면 디버그 시 어떤 부분에서 문제가 발생하고 있는지 찾기 어려운 때가 있다. CoffeeScript에서는 소스로 원래 소스코드를 디버거로 표시할 수 있다.

✎ js2coffee : CoffeeScript는 JavaScript로 변환해서 사용한다. js2coffee를 사용하면 JavaScript에서 CoffeeScript로 역변환이 가능하다.

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 파일에서 설정을 기술하고, 커맨드 라인에서 설치 및 업데이트할 수 있다.

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/)

Perl

탄생 : 1987년

주요 용도 : 웹앱

분류 : 절차형 함수형 객체지향형/인터프리터

✎ CGI 시대의 대표 : 인터넷이 보급되기 시작한 1990년대는 정적 웹 페이지가 많았지만, 그중에서 동적 웹 페이지를 표시하는 방법으로 CGI가 많이 사용되었다. 특히 Perl은 압도적으로 인기가 많았다.

✎ 문자열 처리가 장점 : sed, awk 프로그래밍 언어의 특징을 도입해서 문자열 처리가 장점이다. 정규 표현식이 폭넓게 사용되는 계기가 된 언어라고 할 수 있다.

✎ 정규표현식 : 문자열의 패턴 매치를 할 수 있는 표현 방법 (더 알아보기: 정규표현식 POSIX)

✎ 하위 호환성 확보 : Perl 버전이 바뀌어도 이전 버전에서 사용하던 기능을 그대로 사용할 수 있다. 다만 Perl 6은 Perl 5까지와는 다른 언어로 간주되고 있을 정도로 크게 변경되었다. (더 알아보기: 하위 호환성)

✎ 아쉬운 가독성 : 스크립트 언어로는 빠른 편이지만, 소스코드 가독성 면에서는 상대적으로 어려워서 Python, Ruby 언어에 점유율을 빼앗겼다.

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 본체에 내장되어 있다.

PHP

탄생 : 1995년

주요 용도 : 웹앱

분류 : 절차형 객체지향형/인터프리터

✎ 다양한 프레임워크 : CakePHP, Zend Framework, Symfony, Laravel, CodeIgniter 등 다양한 프레임워크가 있다.

✎ 취약성이 남는 경우도 : 초보자도 개발하기 쉬운 언어라서 보안을 의식하지 않고 만들어진 프로그램도 있기 때문에, 취약점이 남아있는 프로그램이 많은 것으로 알려져 있다.

✎ 렌털 서버에서 이용하기 쉽다 : 대부분의 렌털 서버에는 사전에 PHP가 도입되어 있어서 상대적으로 환경을 구축하는 번거로움이 적고 바로 사용을 시작할 수 있다.

✎ LAMP : Linux, Apache, MySQL, PHP의 약자. 동적 웹 사이트를 구축할 때 적합한 오픈 소프트웨어의 조합으로 자주 사용된다.

✎ WordPress : PHP로 개발된 블로그용 소프트웨어. 블로그 말고도 업데이트가 쉬운 웹사이트 구축에도 사용된다.

✎ Hack : Facebook이 개발한 PHP와 호환성이 있는 언어. PHP를 더 빨리 실행하는 것을 목표로 개발되고 있으며, 그 처리 속도로 주목을 받고 있다.

from http://devpad.tistory.com/30 by ccl(A) rewrite - 2020-03-07 07:21:45

댓글

이 블로그의 인기 게시물

1. 라라벨설치 설정

PHP 라라벨프레임워크 설치하기 in CentOS 7

Remove Laravel bootstrap cache config.php uploaded to AWS