0. 개요 🤔 Fortran, Algol 그리고 Lisp 같은 언어들이 일찍이 "고급언어" 라고불린 까닭이 무엇일까? 무엇이 high-level과 low-level이 구분하는 것일까? (고급과 저급이 언어의 value를 나타내는 것은 아니다.) 💡 결론부터 말하자면, 고급 언어와 저급 언어를 가르는 기준은 "추상화 수준"이다. 1. 추상화 (Abstraction) 1-1. 추상화의 목표 추상화는 두 가지 상호 보완적인 목표를 달성한다. 머신 독립성 사람이 이해하기 쉽고 프로그래밍하기 쉽도록 한다. 쉽게 말해서, 복잡한 시스템이나 프로세스를 단순화하고 요약하는 방법이다. 1-2. A Name 추상화는 결국 "이름"을 부여하는 과정을 의미한다. 이 Name이라는 것은 다른 무언가를 나타내는데 사용된다. 이 ..
전체 글
성장 중 🌱🌱1. 에러 발생 Run을 돌린 후 Cannot reolve symbol "~~" 이 여러 개 뜸. 2. 원인파악 찾아보니, 클래스 패스(classpath)가 올바르게 설정되지 않았거나 클래스 파일이 올바른 위치에 존재하지 않을 때 이런 에러가 발생한다고 한다. 내 생각에는 Refactor를 사용하지 않고 drag & drop이나 copy & paste 등으로 마구잡이로 클래스들을 다른 디렉토리로 이동시키다가 에러가 발생한 것 같다. (이전에도 몇 번 이런 적이 있었다.) 3. 해결방법 아마 이 3가지 방법을 순차적으로 진행해보면 해결될 것이다. 1차 시도. Build -> Clean Project 하고, Build -> Rebuild Project를 한다. 2차시도. FIle -> Invalidate C..
0. 개요 🤔 이후 강의들을 듣는 데 필요한 최소한 Compile의 전반적인 과정을 알아보자. 1. Compile 전반적인 과정 * 일련의 phase로 구성되어 있다. Front-End : 의미분석까지의 단계는 소스 프로그램의 의미를 이해하고 분석하는 역할을 한다. Back-End : 나머지 단계는 중간 형태를 사용하여 동일한 target program을 생성하는 역할을 한다. 궁극적으로 token화를 하기 위한 것이다. 우리가 흔히 개발에서 말하는 front-end, back-end와 같은 의미로 쓰이는 것은 아니다. Compiler의 앞면과 뒷면이라고 이해하면 편할 것이다. cf) interpreter는 compiler의 frontend 과정은 공유하지만, compiler와 같이 중간 형태를 직접 해..
0. 개요 🤔 JAVA는 Interpreter를 사용하는 언어라고 하고, C는 Compiler를 사용하는 언어라고 한다. 🤔 그렇다면 컴파일과 인터프리테이션의 차이가 무엇일까? // 이후 글에서 Compilation과 Interpretation 영어를 그대로 사용하겠다. 한글로 정확한 번역이 어렵다고 생각된다. 1. Compilation vs. Interpretation Compilation과 Interpretaion은 서로 반대 개념이 아니다. 둘 사이에 명확한 구분을 하기 힘들다. 1-1. Pure Compilation 컴파일러(Compiler)는 high-level의 원본 프로그램을 target program으로 번역하는 역할을 한다. 사용자는 나중에 운영 체제(OS)에게 target program..
0. 프로그래밍 언어 스펙트럼 프로그래밍 언어 스펙트럼을 살펴보자. computation(연산)의 modle을 기준으로 분류할 수 있다. 이 스펙트럼의 가장 상위 분류에는 "선언적(Declarative)" 언어와 "명령적(Imperative)" 언어가 있다. 소 제목은 각 분류의 언어들의 주요 세부 분류(subfamilies) 1. 선언적(Declarative) 언어 선언적 언어는 주로 "컴퓨터가 무엇(WHAT)을 해야 하는가"에 중점을 둔다. 프로그래머는 원하는 결과물 또는 속성을 선언한다. 어떤 순서로 실행해야 하는지를 명시하지 않는다. 선언적 언어의 하위분류로는 함수형(Functional), 데이터플로우(Dataflow), 논리 또는 제약 기반(Logic or Constrained-Based) 언어..
0. 개요 이렇게 프로그래밍 언어의 발전 과정을 살펴보면서 의문이 들게 된다. "왜 이렇게 많은 프로그래밍 언어가 탄생했을까?" 이에 대한 대답은 아주 명확하다. "진화(Evolution)" 시간이 흐름에 따라 우리는 더 나은 방법으로 일을 수행하는 방법을 배워왔다. 프로그래밍 언어 또한 진화하였고, 다양성은 계속해서 발전하면서 새로운 아이디어와 개념을 통해 나타났다. 1. 제어 흐름(Control Flow)의 변화 초기 프로그래밍에서는 goto와 같은 제어 흐름이 주를 이루었으나, (Fortran, Cobol, Basic) 이후 구조화된 프로그래밍(Structured Programming)이 등장했다. goto의 남용을 방지하며, 대신 while 루프나 case (또는 switch) 문을 기반으로 한 ..
0. 개요 프로그래밍 언어론에 대한 깊은 이야기를 하기 전에 간단하게 들어가기에 앞서 프로그래밍의 역사와 진화에 대한 내용을 알아보자. (재미로 읽어보자) 1. 초기 과거의 프로그래밍은 상당히 무식한 방식이었다. 컴퓨터는 매우 거대한 장치였고, 프로그래머들은 비교적 저렴했다. 오히려 비싸다고 생각했는데, 아직 기술 초기 단계였고, 프로그래머들의 능력과 고급 기술은 그리 필요하지 않았기 때문이란다. 프로그래밍을 할 때에는 Machine Language(컴퓨터의 CPU를 직접 제어하기 위한 0과 1의 비트로 이루어진 코드)를 사용했다. 이를 통해 덧셈, 비교, 데이터 이동 등과 같은 기본 연산을 컴퓨터에게 지시할 수 있었다. 한 예를 들어, 두 정수의 최대공약수(GCD)를 계산하는 프로그램을 만들 때, x8..
나는 항상 근본을 좋아한다. 이 공부를 왜(Why) 해야 할까? 그 이유를 알고 시작하는 것과 모르고 시작하는 것은 흡수하는 정보의 양을 다르게 만든다. 프로그래밍 언어론을 배우는 이유는 무엇일까? 1. Why Study Programming Languages? 1. 관심과 실용성 프로그래밍 언어를 공부하는 이유는 간단하게 개인적인 관심과 실용성 때문이라고 할 수 있다. 어떤 사람들은 프로그래밍 언어가 어떻게 "내부적으로 작동하는지"에 대해 궁금해한다. 다양한 언어의 원리와 작동 방식을 이해하게 된다면, 구조적으로 코드가 어떤 방식으로 돌아가는지 알 수 있게 된다. 2. 언어 선택을 돕는다 프로그래밍 언어를 공부하면 특정 작업이나 프로젝트에 적합한 프로그래밍 언어를 선택하는 데 도움이 된다. 서로 다른 ..