[프로그래밍] 프로그래밍

WONNY_LOG·2023년 7월 5일

STUDY

목록 보기
3/6

프로그램?

컴퓨터를 실행시키기 위한 방법이 차례대로 작성된 명령어 모음
(프로그래밍 = 컴퓨터 안에 있는 논리적인 기계)

즉,사용자 입력값을 처리 방법과 순서에 따라 처리하여 결과를 산출해내는 명령문 집합체

프로그래밍 실행 입력 > 수동적으로 적혀진 명령어대로 작동 > 작동된 명령에 대한 산출물만 나옴


프로그래밍 이란?

프로그램 언어를 이용해 프로그램을 만드는 일(구현의 모든 과정)

프로그램은 컴퓨터에게 내리는 명령어의 모음인데, 이 명령어의 모음을 만드는 일이 프로그래밍이다. 그리고 이 프로그래밍이 모여 소프트웨어가 된다.
명령어 모음(프로그램) > 명령어 모음 과정(프로그래밍) > 프로그램 모음 > 소프트웨어

프로그래밍 순서


문제 인식 > 프로그램 설계 > 프로그램 구현 > 테스트와 디버깅 > 프로그램 유지보수

  1. 사용자로 부터 입력값 받음 (문제 인식)
  2. 입력값으로 부터 수행해야하는 일을 판단함 (프로그램 설계)
  3. 수행할 일의 처리 순서를 정함 (프로그램 설계)
  4. 정해진 순서에 맞는 명령어를 선택함 (프로그램 설계)
  5. 순서대로 명령어를 실행시켜 값을 산출함 (프로그램 구현)

프로그래밍 언어는 사람을 위한 언어로써 프로그래밍 언어로 작성된 프로그램을 '소스 코드(Source code)'라고한다.
이렇게 사람이 프로그래밍 언어로 입력하면 컴퓨터는 컴퓨터가 이해할 수 있는 언어인 이진 코드('0','1')로 번역을 한다. (컴퓨터 언어는 '머신 코드(Machine code)' 또는 '이진 코드(Binary code)'라고 부름)
소스코드를 컴퓨터가 이해할 수 있는 이진코드로 번역하기 위해서 '인터프리터' 또는 '컴파일러'를 활용한다.


컴파일러와 인터프리터는 **소스 코드를 컴퓨터가 이해할 수 있는 언어로 번역해 명령을 내릴 수 있도록 하는 프로그램** 이라는 공통점을 가지고 있다. 하지만 명확한 차이를 가지고 있다.



컴파일러 란 ?

프로그램 실행시 프로그램 언어 전체를 스캔하여 미리 컴퓨터 언어로 번역한다

  • 전체 파일을 스캔하여 한꺼번에 번역한다.
  • 초기 스캔시간이 오래 걸리지만, 한번 실행 파일이 만들어지고 나면 빠르다.
    => 미리 파일을 만들어 두면 다음 실행시 이전에 만들어 놓은 파일을 실행한다.
  • 컴퓨터 언어 번역하는 과정에서 비교적 더 많은 메모리를 사용한다.
    => 번역하는 과정에서 오브젝트코드라는 파일을 생성하기 때문.
  • 전체 코드를 스캔하는 과정에서 모든 오류를 한꺼번에 출력해주기 때문에 실행 전에 오류를 알 수 있다.
  • 대표적인 언어로 C, C++, JAVA 등이 있다.
    (Java → bytecode / TypeScript → JavaScript / Java → bytecode)



인터프리터 란

프로그램 실행시 한번에 한 문장씩 컴퓨터 언어로 번역한다

  • 프로그램 실행시 한 번에 한 문장씩 번역한다.
  • 한번에 한문장씩 번역후 실행 시키기 때문에 실행 시간이 느리다.
  • 컴파일러와 같은 오브젝트 코드(실행파일) 생성과정이 없기 때문에 메모리 효율이 좋다.
  • 프로그램을 실행시키고 나서 오류를 발견하면 바로 실행을 중지 시킨다. 실행 후에 오류를 알 수 있다.
    => 한문장 읽고, 바로 프로그램 실행의 반복. 이때 오류발생시 프로그램 중단
  • 대표적인 언어로 Python, Ruby, Javascript 등이 있다.

!!인터프리터는 프로그램 언어를 바로 이진코드로 변환하지 않음!!
프로그램 실행시 > 프로그램 언어를 > 먼저 바이트 코드로 번역하고 > 바이트코드를 위한 "가상머신"이라는 프로그램을 통해 > 이진코드로 번역되어 실행된다



트랜스파일러 란 ?

한 언어로 작성된 소스코드를 비슷한 수준의 추상화를 가진 다른 프로그래밍 언어로 변환해주는 도구

  • 컴파일러의 일종인 트랜스파일러( source to source compiler )
  • 주로 최신 버전의 언어를 구형버전으로 변환하거나 다른 언어로 변환하는데 사용된다
  • 트렌스파일러는 소스코드를 분석하고 변환하는 과정을 거쳐 원본 코드와 동일한 동작을 하는 대상 언어 코드를 생성한다
  • 언어간의 문법 차이나 기능 지원 차이를 극복하여 크로스플랫폼 개발이나 브라우저 호환성을 향상시킴
  • 개발 효율성을 높일 수 있다
    (C ++ → C / ES6 → ES5 (Babel) / typescript || coffeescript → Javascript / sass || scss → css)



자바스크립트의 트랜스파일러 "babel"

최신 버전의 자바스크립트 코드를 오래된 버전의 자바스크립트 코드로 변환해주는 역할

babel은 가장 인기 있는 자바스크립트 트랜스파일러 중 하나이다.
최신 문법과 기능을 지원하는 자바스크립트를 오래된 브라우저에서도 실행할 수 있게 됨!

장점

1.크로스 브라우징
다양한 브라우저에서 호환성을 확보하기 위해 ES6+ 문법을 ES5 이하의 문법으로 변환준다. 이를 통해 모든 브라우저에서 일관된 동작을 보장할 수 있다.

2.최신 문법 사용
최신 자바스크립트 문법과 기능을 사용할 수 있다. 이는 개발자가 더 효율적이고 가독성이 좋은 코드를 작성할 수 있게 도와준다.

3.확장성
플러그인과 프리셋 시스템을 제공하여 개발자가 원하는 변환 규칙을 추가하고 설정할 수 있다. 이는 개발자가 프로젝트에 필요한 변환 로직을 자유롭게 커스터마이징할 수 있게 해준다.

4.다른 도구와의 통합
다양한 빌드 도구와 통합하여 사용할 수 있다.
ex) Webpack과 함께 사용하여 모듈 번들링과 트랜스파일링을 한번에 처리할 수 있다.

단점

1.추가적인 빌드 단계
소스 코드의 변환 과정이 추가된다. 이는 빌드 시간을 증가시킬 수 있으며, 개발 환경 설정이 조금 더 복잡해질 수 있다.

2.성능 문제
소스 코드를 변환하는 과정에서 성능에 영향을 줄 수 있다. 특히 큰 규모의 프로젝트에서는 트랜스파일링 속도가 느려질 수 있다.

3.오래된 환경 지원의 한계
오래된 브라우저와 환경에서의 호환성을 제공하지만, 일부 기능이 완벽하게 지원되지 않을 수 있다. 모든 크로스브라우징 이슈를 해결하지 못할 수 있다는 의미.


대표적인 자바스크립트 트랜스파일러

  • TypeScript: TypeScript는 자바스크립트의 상위 집합 언어로, 정적 타입을 지원하는 동시에 ES6+의 기능을 활용할 수 있습니다. TypeScript 컴파일러를 사용하여 TypeScript 코드를 JavaScript 코드로 변환할 수 있습니다.
  • Bublé: Bublé은 ES2015 이상의 자바스크립트 코드를 ES5로 변환해주는 경량화된 트랜스파일러입니다. Bublé은 빠른 변환 속도와 간결한 결과 코드를 제공합니다.
  • SWC: SWC는 Rust로 작성된 고성능 자바스크립트/타입스크립트 트랜스파일러입니다. Babel과 비슷한 기능을 제공하면서도 빠른 컴파일 속도를 가지고 있습니다.
  • Closure Compiler: Closure Compiler는 구글에서 개발한 자바스크립트 트랜스파일러입니다. 코드 압축과 최적화 기능을 포함하여 효율적인 자바스크립트 코드를 생성할 수 있습니다.



플러그인

바벨은 소스코드를 받아서 다른 소스코드로 반환하게 되는데, 이 과정에서 바벨은 파싱과 출력만 담당하게되고 변환 작업은 '플러그인'이 처리하게 된다.
커스텀하게 사용가능하다.

프리셋

바벨의 수많은 플러그인들을 목적에 맞게 여러가지 플러그인을 모아놓은 것을 '프리셋' 이라고 한다.
n개의 plugin1개의 preset
커스텀하게 사용가능하다.

폴리필

바벨은 ECMAScript2015+를 ECMAScript5 버전으로 변환할 수 있는 것만 빌드한다.
때문에 ECMAScript2015+에 없는 Promise는 ECMAScript5 버전으로 변환하지 못한다.
이처럼 변환하지 못하는 것들을 "폴리필"이라는 코드조각을 추가해서 변환할 수 있게한다.

모듈 번들러

각각의 모듈 의존성을 해결하여 여러개의 자바스크립트 파일을 하나의 파일로 번들링해주는 도구













컴퓨터 프로그래밍
컴파일러와 인터프리터
컴파일 vs 인터프리터 vs 트랜스파일러
트랜스파일러
바벨

0개의 댓글