프로그래밍 언어의 역사

jooyeongmee·2023년 2월 13일
0

TIL2023/2

목록 보기
2/8

TIL(2023.2.13)


언어의 역사

  • 컴퓨터는 0과 1밖에 이해하지 못한다.
  • 컴퓨터의 두뇌 역할을 하는 CPU가 3.2GHz라면 1core 기준 컴퓨터는 1초당 대략 32억번의 연산을 수행할 수 있다.
  • 그러므로 컴퓨터는 빠르고 정확하다.

0과 1로만 이루어진 컴퓨터가 이해할 수 있는 언어를 기계어라고 한다. 사람의 입장에서는 너무 복잡하고 어렵기에 기계 명령어와 일상 용어를 일대일로 매칭하는 기계어와 니모닉의 매칭 코드표를 만들었다. 그 매칭 코드표를 어셈블리라고 부른다.

니모닉: 비유법, 다른 유사한 것에 빗대어 잘 모르는 것을 설명하고자 하는 방법.

어셈블리어

  • CPU마다 실행할 수 잇는 기계어가 달랐기 때문에 어셈블리어도 다 달랐는데 아래 그림처럼 서로 다른 어셈블리어를 사용하는 기계는 번역, 실행이 불가능했다.
  • 어셈블러: 어셈블리어 --> 기계어로 번역해 주는 소프트웨어

자주 사용하는 어셈블리어 명령어

C언어

  • 어셈블리어로 개발할 때는 같은 작업을 수행하는 소스파일을 각 기계의 종류만큼 만들어야 했지만 C언어의 등장으로 이제는 소스파일을 단 하나만 만들어도 되는 시대가 되었다.

    C언어 전에 A언어, B언어 등 여러 언어가 있었는데 다 도태되고 C언어만 살아남았다고 한다.

  • C언어는 하나의 소스파일을 각 기계어에 맞는 컴파일러로 컴파일 하여 기계어 목적파일을 만들기 때문에 개발자는 소스파일이 동작하는 기계에 상관없이 개발이 가능하다.

    컴파일: 사람이 이해하는 언어(고급언어)를 컴퓨터가 이해할 수 있는 언어(기계어)로 바꿔주는 과정. 또는, 우리가 작성한 원시코드를 컴퓨터가 이해할 수 잇는 목적코드로 번역하는 과정.

  • 하지만 운영체제마다 각각의 특성이 존재하기에(예. int 타입이 어떤 운영체제에 따라 2B가 될 수도 있고 4B가 될 수도 있다.)
  • C언어를 컴파일 하기 전에 각 기종별로 소스코드를 수정할 필요가 있다.

Java

자바는 객체지향 언어이다.

  • 객체지향 언어의 중심에는 클래스(Class)가 있다.

  • C++는 C에 객체지향 개념을 도입하긴 했지만 클래스 없이도 개발이 가능하기에 객체지향지원 언어라고 부르기도 한다. (자바는 클래스 없으면 안됨)

  • Java는 단 하나의 소스 파일로 모든 기종의 컴퓨터에서 실행이 가능하다.
    (Write Once Use Anywhere)

  • C언어는 하나의 소스 파일로 각 기계에 맞는 목적파일로 만들어 어디든 가능하다.
    (One Source Multi Object Use Anywhere)

  • 즉, 자바는 하나의 목적파일로도 어디든 실행이 가능하고 C언어는 다수의 목적 파일로 각 기계에 맞게 사용한다.

    여기서 자바의 목적파일은 반기계어인 바이트코드(.class)인데 이는 운영체제가 아니라 JVM에서 사용된다.
    자바 컴파일러(javac): 소스코드를 바이트 코드로 컴파일 해주는 것

  • Java의 호환성:

  • Java의 실행 과정:

  1. 개발자는 자바 소스파일(.java)를 작성한다.
  2. JDK가 제공하는 javac 컴파일러를 사용하여 소스파일을 컴파일한다
  3. JVM의 Class Loader는 컴파일로 생성된 바이트 코드(.class)를 전달 받아 동적 로딩을 통해 실행에 필요한 클래스들을 로딩하여 JVM 내부 Runtime Data Area에 로드한다.
  4. JVM의 Execution에 의해 기계어로 해석되어 실행된다.
profile
부지런하면서도 게으른 공순이

0개의 댓글