## High-Level Programming Language - 어셈블리어를 사용하면 프로그래머가 기계어가 아닌 니모닉을 사용해서 명령을 나타낼 수 있으나 여전히 기계의 관점에서 생각해야 함 → 프로그래머의 관점에서 이해하기 쉬운 formal한 방식의 High-level programming language 등장 <br> - High-level language의 요소 - Boolean expressions - Data Typing - Input/Output Structures - Control Structures: selection, repetition - Subprograms, Prameter Passing <br> - 어셈블러가 어셈블리어를 기계어로 변환해주듯이 high-level language 변환에는 **컴파일러, 인터프리터**가 사용됨 - **컴파일러(Compiler)** : high-level language를 기계어로 변환해주는 프로그램 ![[compiler.png|center|400]] <br> - **인터프리터(Interpreter)** : 순서대로 statements를 번역하고 실행하는 프로그램 - 기계어를 출력한 다음 별도의 단계로 실행을 하는 어셈블러, 컴파일러와 달리 인터프리터는 번역 후 바로 실행함 <br> #### Virtual Machine(가상 머신) - 인터프리터를 프로그램을 작성한 언어를 이해하는 시뮬레이터 혹은 가상 머신으로 이해할 수 있음 - Java는 어느 환경에서나 동작하기 위해 Bytecode라는 표준 기계어로 컴파일 됨 - **JVM(Java Virtual Machine)**이라는 소프트웨어 인터프리터가 바이트코드 프로그램을 가져다가 실행함 - JVM이 있는 모든 컴퓨터는 컴파일된 Java 프로그램을 실행할 수 있음 → _WORA_: Write Once, Run Anywhere! ![[JVM.png|center|600]] <br> ## 프로그래밍 패러다임 ✨ > **패러다임** > 패턴 혹은 모델을 뜻하는 용어 <br> [[프로그래밍 패러다임, 함수형 프로그래밍|프로그래밍 패러다임(Programming Paradigm)]]은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할지 결정하는 역할을 한다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게 되고, 이를 바탕으로 코드를 작성하게 된다. - 명령형 프로그래밍 : 프로그래밍의 **상태**와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 방식 - 절차적 프로그래밍 : 수행되어야 할 **연속적인 계산 과정**을 포함하는 방식 (C, C++) - [[객체 지향 프로그래밍, OOP의 개념과 특징|객체지향 프로그래밍]] : 80년대 이후, 객체들의 집합으로 **프로그램의 상호작용**을 표현 (C++, Java, C#) - 선언형 프로그래밍 : 어떤 방법으로 해야 하는지(How)를 나타내기보다 **무엇(What)과 같은지**를 설명하는 방식 - [[프로그래밍 패러다임, 함수형 프로그래밍|함수형 프로그래밍]] : **순수 함수**를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프) - 논리형 프로그래밍 : 논리 문장을 이용하여 프로그램을 표현하고 계산을 수행하는 개념에 기반을 둔 방식 <br> #### 객체지향 방법론(Object-Oriented Methodology) - 솔루션을 함수 위주가 아니라 객체(object) 위주로 만들자는 개념 - 데이터와 연산으로 이루어진 객체 - 객체 간의 상호 작용에 초점을 맞춤 <br> ###### 객체와 클래스 - 객체(object)는 문제의 맥락 안에서 의미 있는 개체를 뜻함 (??) - "everything in the real-world" - 객체는 서로 메시지를 전송(서로의 하위 함수를 호출)하여 통신함 - 클래스(class)는 유사한 개체들의 그룹 - 객체를 관련된 그룹으로 분류하고 그들의 공통적인 특징을 설명하는 아이디어 - 객체가 무엇이고(필드), 어떻게 동작하는지(메소드)를 나타내는 표현 - 필드(field, attribute: 클래스의 속성) + 메소드(method: 객체의 데이터 값을 다루는 명명된 알고리즘)로 이루어짐 > 클래스는 붕어빵 틀, 인스턴스는 클래스로 찍어낸 붕어빵 <br> <br> <br> <br>