기술 발전의 흐름

junhyeong·2023년 3월 20일
0

자바 객체 지향의 원리와 이해 1장의 내용을 정리해보려고 한다.

기술 발전의 흐름

기계어

  • 컴퓨터가 이해할 수 있는 유일한 언어이다. 0과 1로 이루어져있다.

어셈블리어

  • 어셈블리어로 인해 인간의 언어로 프로그램이 가능해졌다.
  • 하지만 '소스코드 : 기계어 = 1:1 매칭'으로 기종별로 어셈블리어가 필요하기 때문에 소스코드도 기종별로 만들어야한다는 단점이 있었다.

C

  • m:n 매칭으로 기종별 컴파일러만 있다면 하나의 소스코드를 실행하는게 가능해졌다.

C ++

  • 이때부터 객체 지향의 개념이 도입되었다.
  • 객체 지향 지원 언어라고도 부를 수 있는데, 그 이유는 순수한 객체지향이지만 객체가 없어도 가능하기 때문이다.

JAVA

  • JVM으로 인해 하나의 컴파일러로 모든 기종에서 하나의 소스코드를 실행할 수 있게 되었다. (JAVA가 OS에 종속적이지 않은 이유)
  • 단, 기종에 맞는 JRE가 설치되어 있어야한다. (JRE, JVM은 OS에 종속적이다)

신기술도 그때 당시에는 배척 받았다?

C

  • 최적화된 컴파일러의 의해 작성된 목적 파일이라고 해도 기계어/어셈블리어로 제작된 프로그램에 비해 매우 느렸다. 그 당시 c언어는 같은 기능을 수행하는 어셈블리어에 비해 cpu/메모리 자원을 효율적으로 사용하지 못했기 때문이다.

C++

  • 기존의 절차적/구조적 프로그래밍과 전혀 다른 패러다임을 제시했기 때문에 반발이 심했다.

java

  • jvm은 말그대로 가상의 컴퓨터를 메모리 안에 하나 더 구축하는 것으로 가상이긴 하지만 컴퓨터를 하나 더 만드는 것이니 더 많은 자원을 소비하는 건 당연했다. 그래서 그때 당시에는 느려서 쓸 수 없어 라는 평까지 받을정도 였다고 한다.

  • 하지만 지금은 하드웨어가 발전해 속도의 체감을 느낄 정도는 아니라고 한다.

JIT?

북스터디를 진행하던 중 스터디원 한분이 추가로 JIT에 대해 공부해보면 좋을 것 같다는 조언을 주셔서 공부해봤다.

JIT 컴파일은 자바가 사용하는 방식으로 인터프리터와 정적 컴파일 방식을 혼합한 방식이라고 할 수 있다.

인터프리터, 정적 컴파일?

인터프리터 방식은 실행중에 코드를 변환하고, 정적 컴파일 방식은 실행 전에 코드를 컴파일 한다.

JIT 컴파일 방식

JIT 컴파일은 앞에서 말했듯 인터프리터와 정적 컴파일 방식을 혼합한 방식이라고 할 수 있다.

자바 컴파일러가 자바 프로그램 코드를 바이트 코드로 변환한 다음, 실제 바이트 코드를 실행하는 시점에서 자바 가상 머신이 바이트 코드를 jit 컴파일을 통해 기계어로 변환한다.

  • 바이트코드 컴파일러는 소스 코드를 중간언어인 바이트코드로 변환한다.
  • 바이트코드는 기계어는 아니지만 가상 머신에 의해 기계어로 손쉽게 변환할 수 있는 코드이다.
  • JIT 컴파일러는 바이트코드를 읽어 빠른 속도로 기계어를 생성할 수 있다(필요한 부분만)
  • 기계어로 변환된 코드는 캐시에 저장되기 때문에 재사용시 컴파일을 다시 할 필요가 없다.
profile
매일매일이 성장하는 하루가 될 수 있도록!

0개의 댓글