greenkang
그린 개발log
greenkang
전체 방문자
오늘
어제
  • 분류 전체보기 (28)
    • 알고리즘 (20)
    • MySQL (0)
    • 생각 (0)
    • 컴퓨터구조 (6)
    • Spring · SpringBoot (1)
    • Java (1)
    • 장애 대응 회고 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 리트코드
  • 프로그래머스 거리두기 자바
  • 프로그래머스 거리두기 java
  • TOPCODER알고리즘트레이닝
  • 41. First Missing Positive
  • 자바
  • 백준
  • java
  • 백준7569
  • 프로그래머스
  • python
  • 알고리즘
  • 컴퓨터구조
  • 백준7569 java
  • 파이썬
  • 백준 17265번
  • 백준 1065번 자바
  • 백준 24479번 자바
  • 어셈블리어
  • 장애 대응 회고

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
greenkang
컴퓨터구조

[컴퓨터 구조] 컴퓨터가 고급언어를 이해하는 방법

컴퓨터구조

[컴퓨터 구조] 컴퓨터가 고급언어를 이해하는 방법

2023. 4. 16. 19:20

*혼자공부하는컴퓨터구조+운영체제(강민철 / 한빛미디어) 책과 강의를 듣고 작성한 내용입니다 :)

 


컴퓨터를 한 마디로 정의하면 명령어를 처리하는 기계 라고 할 수 있습니다.

 

컴퓨터는 우리가 사용하는 프로그래밍 언어로 작성된 프로그램을 바로 이해하고 실행할 수 있을까요?

정답은 그렇지 않다 입니다!

 

컴퓨터가 어떻게 프로그래밍 언어(C, C++, Java, Python...)로 작성된 소스코드를 이해하고, 

실행시키는지 알아봅시다 😋


📗 고급 언어

  • 사람이 이해하고 작성하기 쉽게 만들어진 언어
  • 가독성이 좋고, 변수나 함수같은 편리한 문법 제공
  • 우리가 사용하는 프로그래밍 언어 ex) C, C++, Java, Python...

📗 저급 언어

  • 컴퓨터가 직접 이해하고 실행할 수 있는 언어
  • 기계어, 어셈블리어 2가지 종류가 있음

 

컴퓨터는 고급 언어를 이해하고, 실행할 수 없습니다.

따라서 고급 언어로 작성된 소스코드가 저급 언어로 변환되어야지만 컴퓨터가 이해하고 실행할 수 있습니다.

 

저급 언어의 2가지 종류를 조금 더 자세히 알아봅시다.

  • 기계어 : 0과1의 명령어 비트로 이루어진 언어. 즉, 0과1로 이루어진 명령어 모음입니다. 

기계어를 이진수로 나열하면 너무 길어지기 때문에 가독성을 위해 십육진수로 표현하기도 합니다.

십육진수로 표현했다고 해서 사람이 이해 할 수 있을 만큼 가독성이 올라가지 않습니다.

 

이러한 단점을 보완하기 위해 어셈블리어가 등장했습니다.

  • 어셈블리어 : 기계어를 사람들이 읽고 쓰기 편하도록 번역한 저급 언어

🌟 어셈블리어를 알아두면 좋은 이유 !

프로그램이 어떤 절차로 작동하는지를 가장 근본적인 단계에서부터 하나하나 추적하고 관찰할 수 있기 때문에 어셈블리어를 알아두어야 합니다 (그렇기 때문에 시간이 된다면 어셈블리어에 대해서 따로 포스팅을 해보겠습니다ㅎㅎ)


그래서! 고급언어는 저급언어로 어떻게 변환되는 것 일까요?

크게 두 가지 방식이 있습니다.

 

📗 컴파일 방식

  • 컴파일 방식으로 작동하는 언어를 컴파일 언어
  • 컴파일이란 컴파일 언어로 작성된 소스코드 전체를 저급언어로 변환하는 과정
  • 컴파일러란 컴파일을 수행해주는 도구, 특정한 프로그램
  • 오류를 하나라도 발견하면 컴파일에 실패
  • 컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드 라고 함
  • 즉, 컴파일 언어로 작성된 소스코드 전체를 컴파일러를 통해 컴파일 하면 목적코드로 변환됨
  • 대표적인 컴파일 언어: C

 

📗 인터프리트 방식

  • 인터프리트 방식으로 저급언어로 변환되는 언어를 인터프리터 언어
  • 인터프리터란 소스 코드를 한 줄씩 저급언어로 변환하여 실행해주는 도구
  • 소스 코드를 한 줄씩 실행하기 때문에 소스 코드 전체를 저급언어로 변환할 때까지 기다릴 필요 없음
  • 소스 코드 내에 오류가 있어도 오류를 만나기 전까지 올바르게 수행됨
  • 대표적인 인터프리터 언어: Python

컴파일 방식은 소스 코드 전체를 목적코드로 변환하여 실행하고,

인터프리트 방식은 소스 코드 한 줄 씩 저급언어로 변환하고 해석하며 실행하기 때문에

컴파일 방식이 인터프리트 방식보다 빠릅니다!

 

컴파일 언어와 인터프리터 언어는 명확하게 구분되지 않습니다.

Python도 컴파일을 하지 않는 것은 아니며,

Java의 경우 컴파일과 인터프리트를 동시에 수행합니다.

 


📗 목적 파일

  • 목적 코드로 이루어진 파일

📗 실행 파일

  • 실행 코드로 이루어진 파일
  • 대표적인 실행 파일: 윈도우의 .exe 확장자를 가진 파일

목적 코드는 컴퓨터가 이해할 수 있는 저급언어로 변환된 코드라고 했는데

그럼 목적 파일과 실행 파일은 같은 것일까요? X

 

목적 파일이 실행 파일이 되기 위해서는 링킹이라는 작업을 거쳐야 합니다.

 

📗  링킹 

  • 외부 기능들을 연결 짓는 작업

ex) 링킹 작업 예시

cal.c -> 더하기 라는 기능이 구현되어 있음

main.c -> cal.c에 구현된 더하기 기능과 기본으로 제공되는 화면에 출력 기능이 있음

 

두 개의 소스코드 cal.c, main.c를 컴파일 하여 각각  cal.o, main.o의 목적 코드가 생성됨

main.o는 main.c에 없는 더하기와 화면에 출력 기능을 어떻게 실행하는지 알 지 못하기 때문에 바로 실행할 수 없음

더하기와 화면에 출력 기능을 main.o와 연결 짓는 작업을 해야함

 

이렇게 기능을 연결 짓는 작업을 링킹 이라 하고, 

목적 파일에 링킹작업을 해야 실행할 수 있는 실행 파일이 됨.

 

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

[컴퓨터 구조] 명령어의 구조  (0) 2023.06.06
[컴퓨터 구조] 어셈블리어 2. 예제  (0) 2023.05.01
[컴퓨터 구조] 어셈블리어 1. 기본 문법과 명령어  (0) 2023.05.01
[컴퓨터 구조] 컴퓨터가 데이터를 이해하는 방법 2. 문자  (0) 2023.04.05
[컴퓨터 구조] 컴퓨터가 데이터를 이해하는 방법 1. 숫자  (0) 2023.04.05
    '컴퓨터구조' 카테고리의 다른 글
    • [컴퓨터 구조] 어셈블리어 2. 예제
    • [컴퓨터 구조] 어셈블리어 1. 기본 문법과 명령어
    • [컴퓨터 구조] 컴퓨터가 데이터를 이해하는 방법 2. 문자
    • [컴퓨터 구조] 컴퓨터가 데이터를 이해하는 방법 1. 숫자
    greenkang
    greenkang

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.