서론
이 글을 시작으로 자바에 대해 기초적인 개념부터 알아가고 정리해보려고 한다.
글을 전부 쓰고나서는 아니겠지만, 사실 이 글을 쓰는 지금까지 자바를 제대로 배워본 적이 없다.. 오히려 특이하게도 자바보다 코틀린을 먼저 공부하게 되었다, 때문에
현재 "자바에 대해 깊이 탐구해보자" 라는 것에 대한 이유도 사실 코틀린이라는 언어를 좀 더 깊게 공부해보기 위한 과정의 일환이다.
특히 코틀린 언어의 탄생 배경과, 철학에 대해 찾아보고 생각해보고 있는데, 이를 위해서는 그러한 질문을 자바에도 던져봐야겠다는 생각이 들었다.

자바의 역사와 철학에 대해서는 여러 원문들을 찾아 번역하여 조사하였다.
주로 참고한 자료는 라이언 고슬링, 헨리 맥길턴의 "Java White Paper(자바 백서)" 이다.
(https://www.stroustrup.com/1995_Java_whitepaper.pdf)
또한 도서 "모던 자바 인 액션 - 전문가를 위한 자바 8, 9, 10 기법 가이드"
(https://product.kyobobook.co.kr/detail/S000001810171)의 내용도 참고하였다.
Java의 역사
Java의 시작
자바는 제임스 고슬링(James Gosling), 마이크 셰리던(Mike Sheridan), 패트릭 노튼(Patrick Naughton)에 의해 1991년 개발이 시작되었다.

사실 지금까지 내게 자바는 유명한 게임 "마인크래프트"의 개발 언어라는 점과, 특히 컴공 과정을 수강하면서는, 웹 서비스 벡엔드 구축을 위한 프레임워크 "Spring" 의 언어로 인식되곤 했다.

그런데 막상 자바의 역사에 대해 찾아보니 자바는 처음부터 이러한 것들을 타겟으로 만들어진 언어가 아니었다..!
위키피디아에 따르면, 인터랙티브 텔레비전(https://en.wikipedia.org/wiki/Interactive_television)을 위해 설계되었다고 한다.
나도 조사하면서 처음 들어본 단어였는데, 이해하기로는 단방향으로의 방송 제공 및, 볼륨 채널 변환 정도의 저급 상호작용이 가능한 단방향 텔레비전에서 더 나아가 영화를 요청하는 등의 중급 상호작용 이상을 갖는 텔레비전을 의미하는 단어인 것 같다.

좀 더 자세히 찾아본 Java의 등장 이유
특히 자바라는 언어가 왜 등장했을지에 대해 중점적으로 조사해 봤다. 우선 자바가 개발될 당시 (1990년대 초반)의 개발 환경은 PC 소프트웨어에서는 C++을 주로, 하드웨어 성능이 낮은 임베디드 분야 같은 경우에는 어셈블리, C언어 등을 사용했다.
이유 1. 이식성 이슈
현재는 인텔과 라이젠, 두개의 CPU 회사가 거의 주를 이루고 있었지만, 90년대에는 약간 차이가 있었다. 특히 임베디드, 가전쪽의 CPU는 인텔, 모토롤라, 밉스 등 좀 더 다양한 CPU 회사들이 경쟁하고 있었다.
이러한 상황에 미루어 봤을 때 임베디드에 사용될 만한 언어들 중, 어셈블리어는 CPU 제조사 마다 문법이 다르기 때문에 이식성이 제로였고, C언어 또한 어느정도의 이식성을 갖추고 있지만 CPU가 바뀌면 다시 컴파일을 해줘야 하는 이슈가 있었다. 즉 결국에는 CPU별로 어느정도의 관리가 필요하다는 것이었다.
사실은 처음 생각해 봤을 때 이게 뭐가 문제일지 바로 와닿지 않긴했다.. 어차피 생산 되고 나면 끝인데 다시 컴파일을 해야 하나? 라는 생각을 했었다.
좀 더 알아보니 마침 그 당시 네트워크를 통해 분산 클라이언트-서버 환경에서의 제품을 개발 및 제공하여 소프트웨어 업데이트 및 신규 콘텐츠 내려받기 등과 같은 목표를 달성하고자 했던 것으로 보인다.

이때, 만약 CPU가 (A, B, C) 세 가지라면, 처음 프로그래밍을 하고 난 뒤에도 각각에 맞게 컴파일을 해야 할 뿐만 아니라, 업데이트 할 때도 이를 고려해서 그에 맞는 컴파일 결과를 전송해야 했을 것이다. 물론 생산하고 나서 절대 업데이트 할 필요 없는 서비스 혹은 제품이라면 해당 방법이 문제가 되지 않겠지만, 위에서 언급된 인터랙티브 텔레비전 같은 경우를 생각해봤을 때, 이는 꽤나 피곤한 상황이 될 수 있을 것 같았다.
사실 이러한 경우 생산할 때 CPU를 하나로 통일하면 되는거 아닌가? 라고 생각하긴 했지만.. 해당 시대에 임베디드 분야에서는 다양한 CPU 회사가 존재했었기도 하고, 기업의 입장에서 생각해보면, 하나로 통일하게 되면 해당 CPU에 종속성이 생기기 때문에 이는 어려웠을 거라고 생각된다. 여러 회사가 경쟁하는 구조이다 보니 기업은 좀 더 저렴하고 우수한 CPU로 바꾸기를 원했을 것이다...., 그리고 사실 문제가 이것만 있던 것은 아니었다.
이유 2. 메모리 누수
C++은 다들 알다시피 개발자가 직접 메모리를 관리해야 했다. 때문에 기존에는 특정한 패턴을 준수하도록 하거나, 코드 리뷰, 디버깅 등의 방법을 통해 해결하고자 했다. 하지만 결국에는 "사람"이 수행하기 때문에 이에 대한 위험이 0이 되지는 못했을 것이다.
이에 대해 궁금증이 생겨 구체적인 방법도 나중에 좀 더 조사해서 따로 포스팅을 작성하려고 한다.
때문에 이러한 문제를 자바는 사용하지 않는 객체를 식별하여 메모리를 반환시키는 "가비지 컬렉터"를 이용하여 시스템적으로 해결하고자 하였다.

결국 위와 같은 배경에서 OS, CPU에 상관없이 다양한 환경에서 실행되는 이식성이 뛰어난 안정적인 크로스 플랫폼 언어인 자바가 등장하게 되었다.
Java는 어떻게 대중적인 프로그래밍 언어로 성장헀는가?
사실 자바가 등장한 시기인 90년대에는 특히 객체지향이 각광받던 시대였다. 바로 "캡슐화"로 인해 C언어에 비해 소프트웨어 엔지니어링적인 문제가 훨씬 적다는 점이고, 다른 하나는 윈도우 95와 W(indow)I(cons)M(enus)P(ointer) 모델 프로그래밍에 객체 지향 패러다임이 알맞았기 때문이었다.
또한 그 당시 웹 브라우저에서 프로그램을 실행시키기 위해 넷스케이프(Netscape)라는 유명 웹 브라우저가 JVM을 탑재하기로 결정하면서 본격적으로 성장하게 되었다.
Java의 철학은 무엇인가?
자바는 WORA(Write Once, Run Anywhere) 즉 코드를 한번 작성하면 어디서든 돌릴 수 있다! 는 철학을 가지고 있다.

사실 엄밀히 말하면 JVM이 설치된 기기에 한정되기는 하지만, 기존의 프로그래밍 언어에 비하면 정말 대단한 수준의 이식성이라고 생각한다.
JVM 및 자바 실행 환경에 대해서는 더 조사해보고 다른 포스팅에서 더 작성할 예정이다.
사실 역사나 철학 정도는 하나의 포스팅으로 정리할 수 있을 줄 알았으나, 생각을 좀 해보고 싶은 부분도 많았고, 조사 분량이 꽤 되다 보니, 변화 부분은 별도의 포스팅으로 분리하게 되었다. 이상으로 포스팅을 마치려고 한다.
'Java' 카테고리의 다른 글
| Java 8 이전의 멀티스레딩에 대해 알아보자: Thread Pool (0) | 2026.01.29 |
|---|---|
| Java 개념 장착하기 02 - Java의 변화(1) (0) | 2026.01.28 |