Java — 인터넷·기업 소프트웨어의 표준이 된 가상머신 기반 객체지향 (1995, James Gosling)
Java — 인터넷·기업 소프트웨어의 표준이 된 가상머신 기반 객체지향
1. 요약
Java는 1995년 5월 23일 Sun Microsystems의 James Gosling이 공식 발표한 가상머신 기반·객체지향·정적 타입 언어이다. 1991년 Mike Sheridan·Patrick Naughton과 함께 시작한 Green Project에서 출발하여, 셋톱박스 → 웹 브라우저 → 기업 백엔드 → Android로 적용 영역이 크게 변모했다. Write Once, Run Anywhere(WORA) — 한 번 컴파일된 바이트코드가 모든 JVM 위에서 동작 — 가 핵심 사상. 1996년 Java 1.0 정식 출시, 2009~2010년 Oracle이 Sun을 인수하여 현재 Oracle이 관리.
2. 등장 배경
- Green Project (1991): 가전 제품·셋톱박스 등 임베디드 환경을 겨냥한 언어 Oak. C++의 메모리 관리·복잡성·이식성 문제를 피하려 했다.
- 셋톱박스 시장 실패 → 웹으로 전환: 1993~94년 셋톱박스 사업이 실패하자, 웹 브라우저 응용을 새 시장으로 잡았다. *애플릿(Applet)*이 1995년 HotJava·Netscape에 통합되면서 인터넷의 화제가 되었다.
- 이름 변경: Oak → Green → Java(인도네시아 자바 커피에서). 1995년 5월 23일 공식 발표.
설계 5대 목표(공식 명세):
- "simple, object-oriented, and familiar"
- "robust and secure"
- "architecture-neutral and portable"
- Execute with high performance
- Support interpreted, threaded, and dynamic execution
3. 핵심 특징
- JVM 바이트코드 아키텍처 (Write Once, Run Anywhere) — 컴파일된 바이트코드가 모든 JVM에서 동일하게 실행. 이식성 문제를 언어가 아니라 가상머신 차원에서 해결.
- 자동 가비지 컬렉션(Automatic GC) — C++의 수동 메모리 관리(
new/delete)를 폐기. 메모리 누수·dangling pointer를 언어 차원에서 차단. - 정적 강 타입(Static Strong Typing) — 컴파일 시점에 타입 검사. C++보다 단순한 타입 시스템.
- 단일 상속 + 인터페이스(Single Inheritance + Interfaces) — C++ 다중 상속의 복잡성(Diamond 문제) 회피. 행위 다중 상속은 인터페이스로.
- 보안 샌드박스(Security Sandbox) — 애플릿 시대의 신뢰할 수 없는 코드를 안전히 실행하기 위한 권한 모델.
4. 주 용도
- 기업 백엔드 (Java EE/Jakarta EE): 은행·통신·항공·정부 — 큰 트랜잭션 시스템의 사실상 표준.
- Android 모바일: 2008년 Android가 Java를 핵심 언어로 채택 → Kotlin이 2017년 공식 추가.
- 빅데이터·분산 시스템: Hadoop·Spark·Kafka — JVM 생태계의 핵심.
- 컴퓨터공학 교육: 1990년대 후반 ~ 2010년대까지 대학 프로그래밍 입문·자료구조 표준 언어.
- 웹 응용 (초기): 애플릿(1995
2010), 서블릿/JSP(1999), Spring(2004~).
5. 그 시대 설계 도구 매핑
Java는 언어와 설계 도구(UML)가 함께 산업 표준이 된 첫 사례이다.
| 도구 | 역할 | Java와의 관계 |
|---|---|---|
| UML 1.0/1.x (1997~) | Booch + OMT + Jacobson 통합 시각적 설계 표기법 | 거의 모든 Java 교과서가 UML 클래스 다이어그램으로 시작 |
| Design Patterns: GoF (1994) | 23개 OO 설계 패턴 | Java가 패턴의 교과서적 구현 언어가 됨 — Singleton·Factory·Observer·Strategy를 Java 코드로 가르침 |
| Rational Rose / Together | UML 시각 모델링 + 코드 생성 | UML → Java 코드 자동 생성·역공학 |
| Refactoring (Martin Fowler, 1999) | 기존 코드 구조 개선 카탈로그 | 책의 모든 사례가 Java. Extract Method·Move Field·Pull Up Method가 IDE 기능으로 기록됨 |
| Eclipse / IntelliJ IDEA | Java IDE | 리팩토링·자동완성·구조 탐색을 IDE 차원에서 표준화 |
| JUnit (Kent Beck + Erich Gamma, 1997) | 단위 테스트 프레임워크 | TDD를 Java 산업에 보급. SUnit(Smalltalk)에서 옮겨옴 |
| RUP (Rational Unified Process, 1996) | UML 기반 반복 개발 프로세스 | Java 기업 프로젝트의 표준 방법론 |
→ 결정적 사실: Java 1.0(1995)·UML 1.0(1997)·Design Patterns(1994)·Refactoring(1999)·JUnit(1997)이 모두 1990년대 후반에 동시에 산업 표준이 되었다. 이는 우연이 아니라, Java라는 언어와 OO 설계 도구·방법론이 함께 성숙한 결과다.
6. 강의 활용
핵심 명제와의 연결: Java가 기업 소프트웨어의 표준이 된 것은 언어 자체의 우수성만이 아니다. UML로 설계 → Java로 구현 → JUnit으로 테스트 → Refactoring으로 진화라는 전체 작업 흐름이 표준화되었기 때문이다. 즉 언어가 살아남으려면 설계 도구·테스트 도구·진화 도구가 함께 성숙해야 한다는 본 강의 핵심 명제의 결정적 산업 사례.
강의에서의 위치: G4 시리즈의 대중화 단계. Smalltalk(원형)·C++(산업 도입)에 이어 Java가 모든 개발자가 쓸 수 있는 OO 언어로 자리잡음. 그리고 이 시기가 UML·Design Patterns·TDD·Refactoring이 모두 산업 표준이 된 시기와 일치한다는 점이 강의 핵심.
오늘날의 흔적:
- Kotlin·Scala: JVM 위에서 Java를 계승·진화. Android 공식 언어가 Kotlin으로 전환(2019).
- C# (Microsoft, 2002): Java를 직접 참고한 언어. CLR(Common Language Runtime)이 JVM의 사상을 따름.
- Spring Framework: 2004년 출시 후 Java 기업 백엔드의 사실상 표준. 의존성 주입·AOP·트랜잭션 관리.
- JUnit 5 (2017~): 모든 xUnit 프레임워크의 표준이 됨.
- GraalVM (2019~): 모든 언어를 JVM에서 실행. Java가 언어가 아니라 플랫폼임을 재정의.
오늘 LLM 시대로의 다리: 본 강의에서 가장 중요한 다리. AI Agent에게 Java 기업 시스템을 코드로 작성시킨다는 것은, UML 클래스 다이어그램·시퀀스 다이어그램과 동등한 명세를 프롬프트와 컨텍스트로 박는다는 뜻이다. 즉 Spec-Driven Development는 UML 시대의 작업 흐름을 자연어 + 컨텍스트 엔지니어링으로 옮긴 것이다. 프롬프트가 곧 UML이라는 관점에서 보면, Java/UML 시대의 작업 흐름이 그대로 LLM 시대로 살아 돌아왔다.
출처
- Wikipedia, "Java (programming language)", https://en.wikipedia.org/wiki/Java_(programming_language)
- Gosling, J., Joy, B., Steele, G., & Bracha, G. (2005). The Java Language Specification (3rd ed.).
- Booch, G., Rumbaugh, J., & Jacobson, I. (1999). The Unified Modeling Language User Guide. Addison-Wesley.
- Fowler, M. (1999). Refactoring: Improving the Design of Existing Code. Addison-Wesley.
- Beck, K., & Gamma, E. (1998). "Test Infected: Programmers Love Writing Tests". Java Report, 3(7).
그룹 시리즈
→ synthesis/group-g4 (시대 그룹 종합 카드)