💡 해당 글은 『스프링 입문을 위한 자바 객체지향의 원리와 이해』 도서를 학습하며 도서의 내용을 참고하여 본인의 언어로 표현한 글입니다.
☁️ 기술의 이전
스프링을 비롯한 모든 신기술은 갑자기 하늘에서 뚝 떨어진 것이 아니다. 이전 기술의 어깨를 디딤돌 삼아 그 위에 이전 기술이 제시한 철학과 기법을 정반합의 논리로 정제하고, 이전 기술을 거름삼아 새로운 철학과 기법을 더해 나타나는 것이다.
- 자바 객체지향의 원리와 이해 17p.
우리는 스프링 프레임워크를 이해하고 사용하기 위해서 스프링 이전에 어떠한 기술들이 존재했고, 어떤 불편함을 딛고, 어떻게 발전했는지 알아야 한다.
기계어
기계어는 CPU가 이해할 수 있는 0과 1로 이루어진 언어를 의미한다.
컴퓨터는 0과 1밖에 이해하지 못한다. 최초의 프로그래머는 컴퓨터와 대화하기 위해 진공관을 사용하여 0과 1을 표현했다고 한다.
EDSAC
에서는 01010101 00000001 00001001
과 같은 표현법으로 1 + 3 을 표현했다.
UNIVAC
에서는 11011100 00011000 10011000
과 같은 표현법으로 EDSAC과 동일한 1 + 3을 표현했다.
EDSAC: 2진법을 적용한 세계 최초의 프로그램 내장 방식 전자계산기
UNIVAC: 최초의 상업용 컴퓨터
이렇게 두 CPU에서 사용하고 이해할 수 있는 기계어가 상이했고, 더군다나 읽고 사용하기 어렵기까지 했다.
어셈블리어
0과 1로 이루어진 복잡한 표현식을 개선시키고자 나온 언어이다.
기계어와 니모닉의 일대일 매칭 코드표를 만든 것이다. 이 매칭표를 어셈블리라고 한다. 그런데 CPU마다 기계어가 다르기 때문에 CPU별로 각자의 어셈블리어(Assenbly Language)도 달랐다.
어셈블리어를 기계어로 번역해주는 소프트웨어를 어셈블러(Assenbler)라고 한다.
EDSAC의 01010101은 ADD
니모닉으로, UNIVAC의 11011100은 PLUS
로 매칭되어 사용되었다. 기계어보다 조금 더 인간 친화적인 문자를 통해 컴퓨터와 대화할 수 있게 된 것이다.
니모닉(Mnemonic)
어떤 것을 기억하는 데 쉽게 하도록 도움을 주는 것. 또는 쉽게 기억되는 성질. 니모닉은 재사용이 필요할 때 사람의 기억을 돕기 위해 명확하게 선택된 상징의 조합을 사용하는 것을 말한다.
- 두산백과
C언어
어셈블리어를 통해 인간 친화적인 대화를 할 수 있게되었지만 아직까지 각 기계에 따라 각각의 어셈블리어, 어셈블러가 필요했다. 이를 해결하고자 C가 나타났다.
C언어는 하나의 소스파일로 각 OS에 맞는 컴파일러를 사용하여 각 기계어에 맞는 기계어 목적파일을 만들 수 있다. 여러 기계에 따른 코드를 작성하지 않고 하나의 소스파일로 여러 기계를 동작시킬 수 있게 되었다.
하지만 하나의 소스파일로 모든 기계를 완벽하게 지원하지는 않았다. 운영체제들은 각각 나름의 특성이 있었기에 하나의 소스파일을 컴파일 하기 전 각 기종에 맞게 소스코드를 수정하는 작업이 필요했다.
C++ / Java
C++ 은 C에 객체지향 개념을 도입했다.
C++야말로 순수 객체 지향 개념에 가장 충실한언어이긴 하지만 숨은 반전이 있었다. C++은 객체 없는 프로그래밍도 가능하다는 것이다. 그래서 C++를 객체 지향 지원 언어라고 부르는 것이 맞다고 필자는 생각한다.
- 자바 객체지향의 원리와 이해 26p.
Java는 객체 지향 언어의 중심인 class를 떠나 존재할 수 있는 것은 아무것도 없다. 프로그램의 시작점인 main 메서드 마저도 클래스 안에 static으로 존재한다.
Java에서 JVM을 도입하며 진정한 의미의 Write Once Use Anywhere를 달성할 수 있었다. 하나의 소스파일과 하나의 컴파일러를 통해 각 기계에 맞는 JRE에서 실행시킬 수 있게 되었다.
당시의 자바는 각 기계에 무거운 JVM을 설치한다는 것에 대한 속도 측면에서 부정적인 의견이 있었다. 하지만 하드웨어의 발전으로 속도의 차이는 체감하기 힘들어졌다.
JVM을 도입한 이유?
JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신이다. VM이란 하드웨어 위에서 독자적인 Guest OS를 사용하여 메모리를 할당받아 동작하므로 컨테이너보다 비교적 무겁다.
Java는 왜 JVM을 도입했을까? Write Once Use Anywhere, 자바는 한번의 소스파일 작성으로 어디에든 사용가능한 언어를 만들고 싶었다. 기존의 언어들은 각 기계에 맞게 소스파일을 수정했어야 했다.
따라서 기계와 독립적인 환경에서 자바 프로그램을 실행시킬 수 있는 JVM을 도입한 것이다.
'JAVA > 자바 객체지향의 원리와 이해' 카테고리의 다른 글
06. 스프링이 사랑한 디자인 패턴 (0) | 2024.01.20 |
---|---|
05. 객체 지향 설계 5원칙 - SOLID (0) | 2024.01.18 |
04. 자바가 확장한 객체 지향 (0) | 2024.01.18 |
03. 자바와 객체지향 (0) | 2024.01.17 |
02. 자바의 절차적/구조적 프로그래밍 - JVM의 메모리 (0) | 2024.01.17 |