bootstrap과 fetch()함수를 사용해 간단한 미니프로젝트를 진행했다.
Javascript에서 여태 공부한 것 중 가장 중요한 DOM 제어에 어느 정도 익숙해졌고, 수업은 Node.js로 넘어갔다.
강사님이 교육 과정 중 오늘이 가장 쉬울 거라고 말씀하셨고, 정말 강의 내용은 쉬웠다. 전공자라면 말할 것도 없고 코딩에 관심 있는 사람이라면 한 번쯤 해봤을 별찍기와 메소드 오버라이딩을 실습했다.
강의 중간중간에 수업과 직접적인 관련없는 CS이야기를 해주시는데 CS가 워낙 방대하다 보니 키워드 위주로 언급하고 넘어가는 게 대부분이다.
이번엔 실무 개발과는 밀접하지 않지만 알아두면 좋은 상식 정도인 프로그래밍 언어론에 대해 정리해 보겠다.
목적 코드의 효율성은 번역기가 효율적인 실행 코드를 생성할 수 있어야 함을 의미한다. 여기서 번역기는 컴파일러 또는 인터프리터를 말한다.
번역의 효율성은 번역기가 효율적으로 실행 코드를 생성할 수 있어야 함을 의미한다. 이는 설계된 언어가 번역기에 의해 빠르게 번역될 수 있어야 함을 뜻하는 것이다.
번역기를 효율적으로 작성할 수 있어야 함을 의미한다. 설계된 언어가 복잡하면 구현 용이성이 떨어지는데 이러한 언어의 예로 ALGOL 60과 Ada를 들 수 있다.
프로그래밍 효율성은 설계된 언어로 얼마나 빠르고 쉽게 프로그램을 작성할 수 있는가에 달렸다. 언어 구조가 간결하면 프로그래밍 효율성이 높아지는데 LISP가 이에 해당되는 언어이다.
일반성은 특별한 경우를 피하고 밀접하게 관련 있는 개념들을 하나의 더 일반적인 것으로 결합하는 성질을 의미한다.
직교성은 한 언어의 구성자가 문맥이 다르다고 다른 의미를 지녀서는 안 된다는 성질이다.
획일성은 비슷한 것은 비슷하게 보이고 비슷한 의미를 가져야 하며, 다른 것은 다르게 보이고 다른 의미를 가져야 한다는 원칙이다.
간결성은 단어 뜻 그대로 언어가 복잡하지 않고 간결해야 함을 의미한다.
표현력은 언어가 복잡한 과정이나 구조를 얼마나 쉽게 표현할 수 있는가를 의미한다.
정확성은 프로그램의 실행을 예측할 수 있도록 하는 언어에 대한 정확한 정의가 있는지를 의미한다.
기계 독립성은 언어가 특정 기계에 의존적이지 않고 독립적인 것을 의미한다.
제약성은 언어에 대한 최소한의 지식과 일부 언어 구조만 알고 있더라도 프로그램을 작성할 수 있는 성질을 의미한다.
보안성은 프로그래밍 오류를 줄이고 오류 발견을 쉽게 하는 언어를 설계하는 원칙이다.
컴파일러(compiler): 고급언어인 원시언어를 실제 기계언어에 가까운 저급언어인 목적언어로 만들어 주는 번역기이다. 일반적으로 이 저급언어는 준기계어 형태로 일반적으로 목적 코드 또는 어셈블리 언어가 이에 해당된다.
어셈블러(assembler): 목적언어가 준기계어 형태라는 점에서는 컴파일러와 유사하나 원시언어가 어셈블리 언어인 번역기를 의미한다. 어셈블러에서는 일반적으로 어셈블리 명령어 하나당 하나의 기계어 명령으로 단순 번역된다.
링커(linker): 링커(또는 링키지 에디터)는 재배치 형태의 기계어로 구성된 여러 개의 프로그램(대부분의 경우 각각 컴파일된 목적 코드와 라이브러리 프로그램)을 묶어서 로드 모듈(load module)이라는 어느 정도 실행 가능한 하나의 기계어로 번역해 주는 번역기이다.
로더(loader): 로더는 로드 모듈로 된 기계어 프로그램을 실제 실행 가능한 기계어로 번역해서 주기억장치에 적재한다.
프리프로세서(preprocessor): 프리프로세서는 원시언어와 목적언어가 모두 고급언어인 번역기인데, 프리프로세서기법은 한 고급언어로 작성된 프로그램을 그에 대응되는 다른 고급언어(주어진 컴퓨터에 구현되어 있는 언어)로 번역하여, 그 출력된 고급언어를 이미 구현된 방법으로 실행시킬 때 사용한다. 일반적으로 주어진 고급언어를 확장한 언어로 설계했을 때, 그 언어를 기존의 표준언어로 번역해서 실행하고자 프리프로세서 기법을 사용한다.
이해하기 위한 이미지1
이해하기 위한 이미지2
인터프리터는 고급언어로 된 프로그램을 입력으로 읽어 기계어 수행과 동일한 알고리즘으로 프로그램의 각 문장을 디코딩하고 실행시킴으로 써 고급 언어를 시뮬레이션 하는 것이다.
컴파일러 | 인터프리터 |
---|---|
목적코드 생성 | 목적코드 생성치 않음 |
기억장소 많이 필요 | 기억장소 적게 필요 |
실행시간의 효율성 강조 | 유연성 강조 |
공통점: 고급언어로 표현된 고수준의 프로그램을 읽어들임
참고 사이트
https://studyenthusiast-26.tistory.com/40
https://howudong.tistory.com/234
https://www.differencebetween.net/technology/communication-technology/difference-between-compiler-and-interpreter/