Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
Computer Science/컴퓨터 구조

3. 소스코드/명령어

by Toughie 2023. 7. 11.

📱소스코드/명령어📱

우리가 작성하는 코드를 컴퓨터가 바로바로 이해하고 실행하는 것일까?

iOS 개발을 위해 사용되는 언어인 Swift는 사람, 개발자가 이해하기 쉽게 되어있는 '고급 언어'이다.

즉 우리는 고급 언어로 소스코드를 작성하고 있는 것!

ex. Swift, Python, Java...

 

반면 컴퓨터가 이해하고, 실행하기 위해 필요한 언어는 '저급 언어'이다. 

저급언어는 크게 기계어, 어셈블리어로 나눌 수 있다.

 

기계어?

0과 1로 이루어진 명령어로 구성되어 있다.

0101010101010101010101010101010111100101...

or 16진수로 표기 00CB 02AA fd7b...

 

근데 이걸 우리가 보면.. 외계어 그 자체다.

그래서 이걸 사람이 좀 보고 읽고 이해하기 편하도록 번역한 저급 언어가 바로 어셈블리어다.

 

어셈블리어?

* 아래는 그냥 예시임.

기계어를 우리가 알아볼 수 있도록 번역한 저급 언어라는 것이 중요함.

 

0101 1101 -> push pop

1101 1010 -> add minus

https://m.blog.naver.com/adamdoha/222029157143

어셈블리어 하나하나가 명령어가 되고, 소스코드 내부에서 어셈블리어를 직접 사용하기도 함.

 

고급 언어?

우리가 요즘 사용하는 대부분의 언어가 고급언어다.

하지만 고급 언어 -> 저급 언어로 변환되는 종류는 크게 두 가지가 있다.(컴파일, 인터프리트)

쉽게는 우리와 컴퓨터 사이에 번역기가 있다고 비유할 수 있겠다.

1. 컴파일 방식

컴파일 언어는 

컴파일 언어로 작성된 소스 코드(Source Code)는 '컴파일러'에 의해서 저급 언어로 변환되는데, 이 과정을 컴파일이라고 한다.

* 컴파일러?

- 소스 코드를 입력으로 받아 해당 언어의 문법과 규칙에 따라 분석하고, 결과를 목적 코드로 변환하는 특수한 종류의 프로그램

 

컴파일 결과로 저급 언어인 '목적 코드(Object Code)'가 생성된다.(컴퓨터가 이해 가능한 코드)

+ CPU의 종류와 컴파일러의 종류에 따라 목적 코드의 양상은 달라짐.

 

ex. C, C++, Swift

 

소스 코드 컴파일 과정 중 오류가 발생하면 소스 코드 전체가 실행되지 않는다.

에러가 있으면 빌드가 되지 않는 이유..ㅋㅋㅋ

2. 인터프리트 방식

'인터프리터'에 의해 '한 줄씩' 실행함.

컴파일 언어의 경우 컴파일러가 소스코드를 전부 싹 보고 변환하는 반면,(여기서 컴파일 에러 등이 발생하는 것)

인터프리트 방식에서는 한 줄씩 저급 언어로 변환한다고 이해하면 된다.

*인터프리터?

 인터프리터는 소스 코드를 줄씩 읽고 해석하며, 그에 따라 실행하는 특수한 프로그램.

 

ex. Python, JavaScript, Ruby...

 

소스 코드 인터프리트 과정 중 오류가 발생하면 오류 발생 전까지의 코드는 실행된다.


모든 언어는 컴파일 or 인터프리트 언어일까?

둘 다 가능하거나 경계가 애매모호한 경우도 존재함.

자바의 경우 정확하게는 컴파일 되어 인터프리트 되는 언어라고 함.

Java 소스 코드는 Java 컴파일러에 의해 컴파일 되어 바이트 코드로 변환디고, 이 바이트 코드는

JVM(Java Virtual Machine)에서 인터프리트 되거나, JIT(JustInTime) 컴파일러에 의해 기계어로 변환된다고 함.

 

그렇기 때문에 고급 언어가 저급 언어로 변환되는 과정이 크게 컴파일 방식, 인터프리트 방식이 있다고 이해하는 것이 좋음.


Swift

Swift는 컴파일 언어이다.

Swift 소스 코드는 컴파일러를 통해서 목적 코드로 변환된다. 목적 코드는 각 플랫폼의 기계어에 가까운 형태로 실행된다.

Swift 컴파일러는 소스 코드를 여러 단계로 처리해서 목적 코드를 생성한다.

이 과정에는 소스 코드의 어휘 분석, 구문 분석, 의미 분석 및 최적화가 포함되어 있다.

 

Swift의 컴파일러는 '정적 타입 체크'를 강조해서 안전한 코드 작성을 도와주고, 최적화 단계에서 실행 성능을 향상시킨다.

(Swift가 빠른 이유, 그리고 안정적이고 효율적인 이유)

 

학습 출처: https://www.youtube.com/watch?v=bls_GjX-4U8&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl 

'Computer Science > 컴퓨터 구조' 카테고리의 다른 글

5. ALU와 제어장치  (0) 2023.08.10
4. 명령어의 구조  (0) 2023.07.16
2. 0과 1로 문자 표현  (0) 2023.07.06
1. 0과 1로 숫자 표현  (0) 2023.07.05
0. 컴퓨터 구조 개론  (0) 2023.07.03