-
1. 프로그래밍 언어의 소개전공/프로그래밍 언어론 2020. 5. 2. 12:10
프로그램(또는 소프트웨어)
- 명령의 집합
- 그 명령들이 절차에 맞춰 순서대로 있어야 한다(대표적인 언어: C).
- 데이터 + 알고리즘. 데이터를 어떻게 정의하느냐, 가져오느냐가 굉장히 중요하다.
- 데이터는 컴퓨터의 입력, 알고리즘은 절차(procedure), 데이터 + 알고리즘을 하면 나오는 결과물은 출력(information)이라고 할 수 있다.
- 컴퓨터로 주어진 일을 수행하는 명령어들의 집합.
- 소프트웨어는 보통 OS 위에 올라간다. 따라서 OS에 의존적이다.
명령들이 순서대로 처리되는 것을 procedure이라고 한다.
프로그래밍 언어
- 표기법
- 기계(컴퓨터)에 전달할 명령을 기술하기 위한 언어.
Lexical Structure → 컴파일러 만들 때 필요
- Identifiers : 사용자가 짓는 변수의 이름. int a; a라는 이름을 지음. 식별자.
- Keywords : int, if 같이 언어에서 공식적으로 지정한 단어들.
- Operators : + - * / %
- Separators : , ;
- Literals 상수 : "a" 'a' 7 12.7
- Comment : /* ... */ //...
- Layout : 소스 코드 편집기가 알아서 해줌.
Compile Error → 문법(Syntatic structure)에 문제가 있어서 생기는 에러.
Semantic Error → 버그가 생기는 것.
왜 프로그래밍 언어를 공부해야할까? → 효율적인(efficient) 알고리즘을 짜는 능력이 향상됨! 새로운 프로그래밍 언어를 공부하기가 쉬워짐!
Computation/programming paradigm → 주어진 문제를 어떻게 효율적으로 해결할까?
명령(Imperative) / 절차(Procedural)형 프로그래밍
- 대표적인 언어 : C, FORTRAN
- 메모리(변수)를 조작하는 명령을 순서대로 기술하는 언어.
- 변수의 값을 바꾸기 위해 할당(assignment)을 한다. = memory handling (manipulation)
- Java에서는 메모리 핸들링을 JVM이 다 해준다.
함수형 프로그래밍
- LISP
- 함수 호출의 연속
Logic programming
- Binary (Yes or No)
객체 지향 프로그래밍
- Object가 프로그램의 단위.
- Object = memory location + operations
- 프로그램의 상태를 Object 안에 캡슐화하는데, 해당 Object 안에 정의된 operation들로만 접근할 수 있다.
- Java, C++
- Object를 만드는 것이 Class이다.
- Class = 같은 속성들을 가진 객체들의 그룹.
- Computation = 객체 간의 상호작용.
좋은 프로그래밍 언어의 기준
1. Readability 가독성
2. Simplicity
3. 맞다 틀리다 검증이 쉬워야 한다.
4. 플랫폼에 독립적이어야 한다. 운영체제에 상관없이 한 번 작성하면 어디서든 사용 가능한 언어를 뜻한다. C, Java, C++ 등은 하드웨어에 독립적인데, 개중 C가 그나마 하드웨어에 종속적이다. C를 컴파일하면 바로 바이너리 코드가 생성되는 것이 아니라, 어셈블리 코드가 먼저 만들어지고 다시 바이너리로 만들어지기 때문이다. 따라서 C를 하드웨어에 가까운 언어라고 한다.
5. 개발 환경이 편리해야 한다.
High-level language : 사람이 보고 이해하기 쉬운 언어
Low-level language : 기계가 이해할 수 있는 언어. CPU에 맞는 언어. CPU가 데이터를 어떻게 입력 받고, 처리하고, output을 내주는지. 그 CPU의 메카니즘에 맞게 코딩하는 것.
Assembly language : ADD c, a, 10
Machine language : 01011001 이진수 형태
고급 언어로 코드를 작성하면 하드디스크에 저장되고, 컴파일해서 바이너리 코드로 바꾸면 메인 메모리로 이동(적재)한다.
메인 메모리에 있는 내용만 CPU가 가져와 연산장치(덧셈뺄셈나눗셈곱셈), 제어장치로 처리하여 2진수로 된 명령어를 실행한다.
소스 프로그램/파일 : 우리가 작성하는 것
Object program (기계어로 번역이 된 프로그램 - 2진수) : 실행이 안 됨.
Executable program : 2진수로 번역된 프로그램에 라이브러리를 붙인다. → 라이브러리를 붙이는 것을 링킹이라고 한다.
Load로 exe파일이 메인메모리로 이동한 후 CPU가 실행한다.
프로그램 실행 순서
1. Edit a program ← editor
2. Compile a program ← compiler - obj파일이 만들어진다.
3. Link a program ← linker - exe파일이 만들어진다.
4. Load a program ← loader
5. Run a program
General purpose languages → 우리가 보통 쓰는 언어
Artificial intelligence languages → 인공지능 LISP Prologue
Parallel processing languages
Page description languages → HTML
Database query languages → SQL
Implementation method
Translation/compile → 통으로 번역
- 컴파일러는 실행 가능한 프로그램을 생성한다.
- 기계에 따라서 매번 번역을 다시 해야한다. = 플랫폼에 종속적.
- 속도가 빠르다.
- CPU의 리소스나 메모리를 적게 쓴다. 소스가 어느 정도의 메모리가 필요한지 사전에 계산해서 필요한 만큼만 잡는다.
- C, C++, Pascal, Java
interpreter → 엔터 칠 때마다 번역
- 인터프리터는 소스 프로그램이 무엇을 의미하는지 번역을 하고 실행까지 시킨다.
- 융통성이 뛰어나다.
- 따라서 컴파일러보다 시간이 오래 걸린다.
- 리소스를 많이 쓴다.
- 플랫폼에 독립적이다.
- Python, Java, HTML, JavaScript
Java
Java는 JVM 덕분에 특정 하드웨어와 운영체제 플랫폼에 대해 독립적이다.
Java 프로그램을 실행시키려면 Java 플랫폼이라는 환경이 필요하다.
Java 플랫폼은 JVM과 Java API(Java Application Programming Interface)로 구성된다.
JVM은 Java 프로그램을 컴파일한 후 생성되는 바이트 코드를 실행하는 소프트웨어이고, Java API는 프로그램 개발을 쉽게 하는 다양한 기능을 가지는 클래스와 인터페이스로 구성된 라이브러리이다.
javac : 자바 프로그램을 컴파일하여 바이트 코드로 변환하는 컴파일러. 컴파일을 수행하면 Java 프로그램에 포함된 모든 class 파일에 대해서 별도의 class 파일이 생성된다.
java : JVM을 실행시키는 명령어.
컴파일 후 생성되는 class 파일이 바이트 코드로 되어 있으며 이 class 파일이 JVM에서 실행된다.
JVM은 JRE(Java 실행시간 환경)에 포함되어 있으며, JRE와 Java 컴파일러 및 기타 다른 도구를 포함하여 JDK(Java SDK, 자바 소프트웨어 개발 키트)가 구성된다. 즉 JDK는 JRE를 포함한다.
Abstraction = 중요한 것을 추출함
- 객체의 필수적인 속성만을 가지고 객체를 묘사하는 것.
1. Data abstraction
- 많은 데이터 사이에서 가장 중요한 데이터를 찾아내는 것
2. Control abstraction
- 많은 제어 중 가장 중요한 제어를 찾는 것
'전공 > 프로그래밍 언어론' 카테고리의 다른 글
기본 데이터 형(primitive data types) (0) 2020.05.14 2. 변수 및 바인딩 (0) 2020.05.04