프로그램은 무엇인가?
컴퓨터가 수행해야 될 명령과 순서를 쓴 문서이다.
글이 어떤 언어로 되어있냐에 따라 다르다.
어떤 프로그래밍 언어냐 따라 다르다.
컴퓨터← 글로 된 문서(프로그램)을 받는다.
컴퓨터→ 내가 이걸 읽을 수 있는가?
인간의 언어 구조를 컴퓨터로 이해한다는 것은 어렵다.
프로그램을 컴퓨터가 바로 읽을 수는 없다.
컴퓨터는 프로그램 언어를 0, 1로 변환해서 읽어야 한다.
명령어 = OP(Operater)
명령어에 숫자를 넣은 것은 opcode다
ADD 3, 4 와 같은 것을 어셈블리어라고 한다.
언어를 변환시켜줄 필요가 있다.
고수준언어를 컴퓨터 기계어로 변환하는 변환기는 컴파일러라고 한다.
결국 프로그램은 실행파일이라고 한다. == .exe파일
코딩해서 컴파일 하는 과정을 빌드(변환)이라고한다. 이렇게 하면 기계어로 바뀜
역변환도 가능하다.
해커들은 기계어만 가지고도 어떤 프로그램인지 알 수 있고, 고칠 수 있다.
그러나 굉장히 어렵다. 그러나 가능하다.
프로그램 언어란?
고급언어/저급언어로 나뉜다.
고급언어에는 c, c++, go와 같은 컴파일 언어와 Java, C#, Python, javascript와 같은 동적 언어가 있다.
c, c++, go
- 컴파일 언어
- 코딩→ 빌드→ 기계어
- 먹기전에 돈까스 다 잘라놓고 먹는사람
- 실행 속도가 빠름
Java, C#, Python, javascript
- 동적 언어
- 코딩→ 빌드→
- 기계어가 나오지 않음
- 먹을때 하나씩 자르면서 먹는 사람
- 실행 속도가 좀 느리다.
C, C++, Go언어의 특징
- 컴파일 언어
- 프로그래밍 과정
- 코딩→빌드(컴파일러라는 프로그래머가 코딩한 문서를 기계어로 변환함)→ 실행파일(기계어1, 0)
- 대부분의 고수준 언어는 역변환 과정이 불가능하다.
C#, Java, Python언어의 특징
- 동적 언어
- 코딩→ 빌드 필요(Java, C#)→중간 언어= 문서임→ 기계어로 변환⇒ 실행 중간에 변환을 하는 것을 동적 언어라고 한다.
이런 구분이 왜 생겨났을까?
컴파일 언어는 속도가 빠르다.
동적 언어는 중간 중간 변환 하기 때문에 속도가 느리다.
컴파일 언어가 좋은데 왜 동적 언어들이 생겨났을까?
컴파일 언어는 각 플랫폼 별로 다른 변환이 필요했다.
⇒ 각 프로그램 별로 실행 파일이 모두 달랐어야 했다.
⇒각 플랫폼 별로 빌드가 필요하다.
과거에는 굉장히 많은 CPU회사가 있었다.
자연어를 기계어로 변환 할 때의 어셈블리어의 각 명령어 마다 번호를 부여하게 되는데, 문제는 칩셋 제조사 마다 이 번호가 다 달랐다.
결국, 어떤 칩셋을 사용하냐에 따라 다르게 동작해야 했다.
인텔 CPU
- 칩셋의 발전 과정 8086-80286-80386-80486- 펜티엄, , , , I3, I5, I7(요즘 나오는 것)
새로운 CPU가 나올때 OP코드도 추가된다.
같은 인텔 계열 칩셋이라도 어떻게 변환하냐에 따라 프로그램이 달라진다.
OS- 윈도우즈, Mac, Linux 등 각 OS마다 동작 방식이 다르고, 실행파일 형식도 다르고 실행하는 방법도 다르다.
CPU, OS에 따라 컴파일 변환 과정이 다 달랐다.
옛날 게임들- Windows밖에 안돼 등.. 문제가 있었다.
이런거 해결을 위해 나온것 = 동적 언어
프로그램을 만들어 놓으면 실행주체가 어떤 프로그램인지 파악해서 그때 그때 변환 하는 것임.
Java 언어의 특징
- 코딩→ 결과 → 빌드 → .JAR
- 플랫폼에 따라 실행 가능 하도록 알아서 변환된다.
- 컴파일 언어에 비해서 속도가 떨어진다는 문제점이 있었다.
- C++이 자바보다 빠르다고 말하는 사람이 많다.
- 언어적으로 완성도가 높다.
- 라이브러리 지원이 많다.
- 생산성이 좋다. (C# 또한)
C, C++ 언어의 특징
- 사용법이 까다롭고 라이브러리가 좀 ,, 자바보다 못하다.
- 속도는 자바와 거의 비슷하다.
첫 언어로 선택할만한 언어에 어떤 언어가 있는가.?
C언어
- 기본, 근간, simple, 포인터
C#
- 첫 언어로 무난하다.
- Windows에서 잘 돌아간다.
Python
- 언어구조 단순, 짜임새가 좋다, 언어의 완성도가 높다.
- OOP적 측면에서 봤을때 완전 좋다.
- 인터프리터 언어
- 속도가 떨어진다.
Javascript
- 웹쪽 언어
- 자바스크립트를 첫 언어로 쓰기에는 안좋다.
- 완성도가 떨어진다.
- 웹쪽 쓸 때는 필수
해당 글은 [Tucker의 Go 언어 프로그래밍] 2장을 읽고 공부한 글입니다.
'Golang' 카테고리의 다른 글
[묘공단] Go언어 기초 15-17장(문자열, 패키지) (0) | 2024.01.23 |
---|---|
[묘공단] Go언어 기초 12-14장(배열, 구조체, 포인터) (0) | 2024.01.23 |
[묘공단] Go언어 기초 8-11장(상수, if문, switch문, for문) (1) | 2024.01.23 |
[묘공단] Go언어 기초 3-7장(Go언어란?, 변수, 표준입출력, 연산자, 함수) (0) | 2024.01.23 |
[묘공단] Go언어 기초 1장 컴퓨터 원리 (2) | 2024.01.23 |