1. 기계어
- Machine Code (=Machine Language)
- Native code
- Low Level / High Level
Compiler / JIT / interpreter- MachineStrong / Weak- MachineManaged/ UnManaged- Procedural
/ OOP / functional
- 물리 언어 : 기계 장치와 연관 되어 있는 언어이다.
컴퓨터가 이해하기 쉬운 언어로 비트 단위의 0과 1(숫자 코드)로만 표현된다.
컴퓨터로 바로 이해할 수 있는 언어로 되어 있기 때문에 기계어 이상의 변환 과정이 필요 없다.
CPU가 바로 해독할 수 있는 유일한 언어이자 모든 프로그래밍 언어의 종착지다.
번역기를 통해 나오는 마지막 실행코드이다.
( 모든 언어는 이 기계어로 번역되어야 한다. )
[참고] 해커는 기계어 만으로 어떤 프로그래밍인지 해석하기도 한다.
2. 어셈블리어
- Assembly Language
- Low Level / High Level
Compiler / JIT / interpreter- AssemblerStrong / Weak- Assembly- Managed / UnManaged
- Procedural
/ OOP / functional
- 물리 언어 : 기계 장치와 연관 되어 있는 언어이다.
인간이 이해하기 쉬운 언어로 문자 코드를 사용한다.
기계어 비교할 때 사람에게 보다 친근한 코드이다.
1) 기능코드
실행코드가 되기 전 단계인 기능코드 역할을 하고 있다.
대부분의 중/고급 언어의 컴파일러에는 어셈블러가 병합되어 있다.
그러다보니 C의 경우도 C→기계어와 같이 가는 것이 아니라 C→어셈블리어→기계어 순으로 컴파일 할 수도 있다.
( C로 작성한 다음 어셈블리어로 최적화 한다는 것도 이런 식이다. )
가상머신 에서도 어셈블리어가 사용된다.
Java의 바이트코드와 .NET Framework|.NET CLR의 CIL이 대표적인 가상머신 어셈블리어 이다.
다만, 가상머신 어셈블리어는 다양한 자료형을 지원하거나 함수를 지원하는 등 실제 어셈블리어와는 차이를 보이며, 대개 JIT 컴파일러를 거치거나 인터프리터를 통해 해석된다.
2) 기계어와 일대일 대응
대부분 기계어랑 일대일 대응이 가능하다.
- 이 때문에 '저수준 언어'라고 부르기도 한다.
- 명령어 종류 - ADD, SUB, MUL, DIV / JMP / LOAD, WRITE
- 과정 예시 - (ex) MOV는 10, ADD는 20, MUL은 30
[ 어셈블리어 => 기계어(2진수) ]
MOV R1, 3 => 0000 1010 0000 0001 0000 0011
MOV R2, 4 => 0000 1010 0000 0010 0000 0100
ADD R1, R2 => 0001 0100 0000 0001 0000 0010
MOV R1, 3 ; 숫자 3을 R1에 저장
MOV R2, 4 ; 숫자 4를 R2에 저장
ADD R1, R2 ; R1과 R2의 값을 더한 후 그 결과를 R1에 저장
3) 비통일 된 규격
기계어는 CPU가 채택한 ISA에 따라 다 다르기 때문에 어셈블리어의 명령어 역시 통일된 규격이 없다.
( 또한 문법 아키텍처에 따라서도 다르고 어셈블러의 종류에 따라서도 문법/매크로 등이 제각각이다. )
4) 저수준 ~ 고수준 언어
인간이 이해할 수 있는 문자코드를 사용한다는 점에서 '고수준 언어'로 불리기도 하며,
고급 언어와 기계어 사이에 있다 하여 '중간 언어'라고 불리기도 하며,
기계어와 일대일 대응이 가능하다 해서 '저수준 언어'라고 불리기도 한다.
3. C
- Low Level / High Level
- Compiler
/ JIT / interpreter - Strong /
Weak Managed/ UnManaged- Procedural
/ OOP / functional
자원 관리를 빡빡하게 해야 할 때 사용된다. ( 자원 최적화 )
하드웨어와 밀접하다.
어셈블리어를 삽입할 수도 있다.
C 언어의 경우에는 사람이 이해하기 편한 문법 구조로 되어 있지만
기계어의 명령 구조와 유사한 문법들도 가지고 있어서 '중급 언어(Middle-Level Language)'라고 부르기도 합니다.
( low와 high의 중간 )
보안상으로 보면 초보자와 숙련자 사이의 격차가 크기 때문에 공격을 많이 당하기도 한다.
근본 거의 모든 것의 시작 - 후속 언어들에게 많은 영향을 끼친 언어이다.
C언어 자체로 배울 양은 적지만 하드웨어 자체를 알아야 하기 때문에 배우기 어려운 언어이다.
10년뒤 살아남는 개발자가 되기 위해서는 C를 이용할 줄 알아야 한다.
( 정확히 말하면 컴퓨터를 알아야 한다. )
(정신) Trust the programmer - 다른 의미로는 프로그래머가 해야 할게 많다.
(특징) 포인터 메모리 직접지정
(사용처) 임베디드 프로그래밍, 운영체제
4. C++
- Low Level / High Level
- Compiler /
interpreter - Strong /
Weak Managed /UnManagedProcedural/ OOP/ functional
C언어의 확장판이다.
Class라는 객체지향 개념이 들어간다.
( 비슷한 예로 JavaScript - TypeScript가 있다. )
로우 레벨 퍼포먼스, 메모리 관리가 편리하여 임베디드에서 높은 속도 퍼포먼스를 요하는 경우 사용된다.
굉장히 난해서 프로그래밍 언어 중 가장 사용하기 어려운 언어이다.
(사용처) 포토샵, 프리미어 프로, 게임 서버, 임베디드 등
(키워드) STL
5. JAVA
객체지향 대표 언어 - 로우레벨 보다는 하이레벨과 가까운 언어
Low Level/ High LevelCompiler /JIT/ interpreter- Strong /
Weak - Managed /
UnManaged Procedural /OOP/ functional
- 오라클과 함께 하는 생태계다. - Oracle 생태계 / Oracle 기업
- JVM이라는 가상머신 기반의 언어다. ( Byte 바이트 코드를 활용하기에 호환성이 좋다. )
- 레퍼런스가 많고, 안정성이 좋지만, 문법이 복잡하고, 타입 지정 해야 해서 조금 복잡하다.
(점유율 지역) 한국
(사용처) 정부, 기업, 은행 - 기업용 어플리케이션, 서버, 앱 - 시스템, 앱, 웹 다 가능
6. C#
Low Level/ High LevelCompiler /JIT/ interpreter- Strong /
Weak - Managed /
UnManaged Procedural /OOP/ functional
- 닷넷 시스템과 함께하는 생태계다. - .Net 생테계 / MS 기업
- 가상머신 기반의 언어로 ( 닷넷을 활용하기에 호환성이 좋다. )
- C++보다 JAVA에 더 유사하다. 마이크로소프트 JAVA
- 기업용으로 만들어진 프로그래밍 언어다.
(점유율 지역) 유럽, 미국 등
(사용처) "기업용 어플리케이션", 서버, 게임 - 응용프로그램, 웹 서버, 게임 unity 3D 등 가능
MS가 발목 잡아서 윈도우즈라는 플랫폼에서 벗어날 수 없었으나
지금은 위기를 느끼고 멀티플랫폼 이라는 한계를 넘어서고 있다.
[ C++ / C# ]
- 동작 속도 : C++ >>> C#
- 개발 속도 : C# >> C++
참고
- 뉴렉처 - 컴퓨터 프로그래밍을 하기 위한 사전지식 : 6강 ~ 12강
- POCU 프로그래밍 입문 ( with C# )
- 위키백과
ps. 추후에 추가 및 수정 예정입니다.
'Start Beginner > CS for Beginner' 카테고리의 다른 글
[CS 입문] 04. 정보와 데이터 (0) | 2023.06.11 |
---|---|
[CS 입문] 03. 컴퓨터 부팅 과정 (0) | 2023.06.11 |
[CS 입문] 02. 하드웨어와 소프트웨어 (0) | 2023.06.10 |
[CS 입문] 01. 컴퓨터의 역사 (0) | 2023.06.10 |
[프로그래밍 입문] 01 프로그래밍 언어 종류 (1) | 2023.06.08 |