Java 프로그래밍 언어
"자바
"로 발음하는 Java
는 프로그래밍 언어입니다. 이 문서는 Java
라는 프로그래밍 언어를 다루고 있습니다. 이제부터 전 세계 프로그래머들에게 오랜 기간 동안 사랑받아온 언어인 Java
를 배워보도록 하겠습니다.
Java
를 한 줄로 압축해서 정의하면 다음과 같습니다. 이 언어는 다양한 의미와 기능을 담고 있습니다.
```java
// Java: 전 세계적으로 널리 사용되는 프로그래밍 언어로, Oracle Corporation이 관리하고 있습니다. ```
이 문서를 작성하는 시점에서 Java는 Oracle Corporation에 의해 관리되고 있습니다. 현재 상황은 어떤가요?
1.1. 컴퓨터와 프로그래밍 언어
1.1.1. 하드웨어와 소프트웨어
컴퓨터는 하드웨어(Hardware)와 소프트웨어(Software)로 구성됩니다. 하드웨어는 PC, 스마트폰과 같은 물리적 장치를 의미하며, 소프트웨어는 이러한 하드웨어에서 실행되는 운영체제, 애플리케이션 등을 말합니다.
NOTE
제가 개인 사업을 시작할 때 회사 이름을 정하면서, 하드웨어와 소프트웨어를 결합해 제품(Ware)을 만들겠다는 의미로 "하와소"라는 이름을 선택했습니다. 2023년 현재까지도 성공적으로 운영 중입니다. 이 모든 것은 여러분의 지원 덕분입니다. 감사합니다.
(Hardware + Software) => Ware
1.1.2. 프로그래밍과 프로그래머
소프트웨어를 만드는 행위를 프로그래밍(Programming)이라고 합니다. 소프트웨어를 만드는 사람을 프로그래머(Programmer) 또는 개발자(Developer)라고 부릅니다.
- 프로그래머(Programmer)
- 소프트웨어 개발자(Software Developer)
1.1.3. 프로그래밍 언어
프로그래밍 언어는 컴퓨터에게 명령을 내려 프로그램을 만들 수 있게 해주는 도구입니다. 사람이 언어를 사용하여 소통하듯, 프로그래밍 언어는 키워드와 문법을 통해 소프트웨어를 구축합니다. 세상에는 C, C++, C#, Java, JavaScript, Python 등 다양한 프로그래밍 언어가 있으며, 이 문서에서는 Java를 중점적으로 다룹니다.
1.1.3.1. 프로그래밍 언어 순위
Java는 오랜 기간 동안 프로그래밍 언어 순위 상위권에 위치해왔습니다. 각 개발자의 취향에 따라 선호하는 언어가 다를 수 있으며, 순위에는 변동이 있을 수 있습니다. 그러나 저는 여러 언어를 사용해봤음에도 Java를 가장 선호합니다. 이는 Java의 간결함, 명확한 문법, 그리고 다양한 편리한 기능 때문입니다.
다음 그림은 전 세계 개발자 커뮤니티인 스택오버플로(StackOverflow)에서 2020년에 실시한 설문 조사 결과입니다. Java는 항상 상위권에 위치해 있으며, 실제 프로그래밍 언어 순위에서는 JavaScript, Python, Java의 순으로 상위권에 랭크되어 있습니다.
1.1.4. 용어: 코드(Code)와 코딩(Coding)
- 코드(Code)는 텍스트 형태로 작성된 소프트웨어를 만드는 명령들의 집합입니다.
- 코딩(Coding)은 프로그래밍 언어로 프로그램을 작성하는 과정입니다. 코딩은 컴퓨터 프로그래밍과 유사한 개념입니다.
1.1.5. 용어: 컴파일(Compile)과 인터프리트(Interpret)
프로그램 소스 코드를 컴퓨터가 실행할 수 있는 기계 코드로 변환하는 프로그램을 컴파일러(Compiler)라고 하며, 이 과정을 컴파일(Compile)이라고 합니다. 반면, 소스 코드를 직접 해석하여 실행하는 언어는 인터프리터(Interpreter) 언어라고 합니다. Java는 컴파일 언어이지만, 실행 시점에 바이트코드를 기계 코드로 변환하는 저스트-인-타임(JIT) 컴파일러를 사용하는 하이브리드 형태입니다.
- 컴파일(Compile)
- 소스 코드를 기계 코드로 변환
- C, C++, Java 등
- 인터프리트(Interpret)
- 소스 코드를 인터프리터로 직접 실행
- JavaScript, Python, PHP 등
- 하이브리드
- Java (JIT 컴파일 사용)
1.2. Java 소개
Java는 Oracle Corporation에서 관리하는 객체 지향 프로그래밍 언어입니다. Java 프로그래밍 언어를 사용하면 데스크톱, 웹, 모바일, 게임 프로그램 등 다양한 분야에서 프로그램을 작성할 수 있습니다. 수많은 프로그래밍 언어 중에서 전 세계 개발자들에게 오랜 기간동안 가장 많이 사용되는 언어 중 하나입니다.
Java는 C언어 계열의 객체 지향 프로그래밍 언어입니다. Java는 1995년에 Sun Microsystems에서 개발되었으며, 이후 Oracle Corporation에 의해 관리되고 있습니다.
1.2.1. Java 프로그래밍 언어
Java는 소프트웨어, 즉 응용 프로그램을 만들기 위한 프로그래밍 언어입니다. 프로그래밍 언어는 Java 이외에도 C, C++, Python, JavaScript 등 많은 언어들이 있습니다. Java의 장점은 하나의 프로그래밍 언어를 배운 후 이를 가지고 데스크톱 프로그램, 웹 프로그램, 모바일, 그리고 게임 프로그램 등을 제작할 수 있다는 데 있습니다.
- Java는 Sun Microsystems의 최고 엔지니어인 제임스 고슬링(James Gosling)에 의해 개발되었습니다.
- Java는 1995년에 처음으로 발표되었습니다.
- Java 프로그래밍 언어는 지속적으로 발전해왔으며, 다양한 버전에서 개발자들에게 도움을 주는 기능들이 추가되었습니다.
- Java는 강력하고 재사용 가능한 응용 프로그램을 쉽게 만들 수 있습니다.
CAUTION
Java를 만든 사람의 이름은 제임스 고슬링(James Gosling)입니다. 본인이 직접 그 이름으로 소개합니다.
1.2.2. Java의 특징
Java 프로그래밍 언어의 특징은 다음과 같습니다. 대부분 처음 보는 단어가 나오니 가볍게 한 번 읽어보세요. 자세한 내용들은 이어지는 강의들을 통해서 계속해서 학습할 예정입니다.
- Java는 독립적인 플랫폼을 위한 많은 언어 중 하나입니다.
- Java는 Oracle Corporation의 Java 플랫폼 기반의 프로그래밍 언어입니다.
- 절차적 언어와 객체 지향적 언어의 특징 그리고 함수형 프로그래밍 스타일을 제공하는 다중 패러다임 프로그래밍 언어입니다.
- Java는 C, C++, C#, JavaScript와 기초 문법이 비슷한 프로그래밍 언어입니다.
- Java는 메모리 관리를 자동으로 합니다 (가비지 컬렉션).
- Java는 컴파일 기반 언어입니다 (자바 소스 코드는 바이트코드로 컴파일됩니다).
- Java는 모든 함수와 변수가 클래스 안에서 정의됩니다.
- Java는 강력한 형식(Strongly Typed)의 언어입니다.
- 제네릭과 스트림 API의 편리한 기능을 제공합니다.
1.2.3. Java 영역
Java는 다양한 프로그래밍 영역을 다룹니다.
- 데스크톱 응용 프로그램
- 웹 응용 프로그램
- 모바일 응용 프로그램 (안드로이드)
- 데이터베이스 응용 프로그램
- 게임 프로그램
- 클라우드 프로그램
- IoT 프로그램
1.2.4. Java의 역사와 버전
Java는 굉장히 오랜 기간 발전해 온 프로그래밍 언어입니다. 다음 이어지는 내용들은 간단히 읽고 넘어가면 됩니다.
1.2.4.1. Java 나오기 전의 프로그래밍 세계
Java가 세상에 나오기 전에는 C, C++, Visual Basic 등의 프로그래밍 언어가 많이 사용되었습니다.
- ANSI C : C언어 기반의 다양한 응용 프로그램 제작
- C++ : 객체 지향적 프로그래밍 환경
1.2.4.2. Java 버전
Java는 1.0 버전부터 지속적으로 발전해 왔습니다. 이 강의 전체를 통해서 학생 개발자를 위한 Java의 거의 모든 기능을 학습합니다. 다음 표는 앞으로 배울 내용이니 참고용으로 보시면 됩니다.
버전 | 출시 연도 | 주요 특징 및 변경 사항 |
---|---|---|
Java 1.0 | 1996 | Java의 첫 출시, 기본 언어 기능 및 API 제공 |
Java 1.1 | 1997 | 이벤트 모델 개선, JDBC, RMI 도입 |
Java 1.2 | 1998 | Swing GUI 툴킷 추가, Java 플러그인 |
Java 1.3 | 2000 | 핫스팟 JVM 도입, RMI과 CORBA 통합 |
Java 1.4 | 2002 | 정규 표현식, NIO, XML 처리, 자바 웹 스타트 |
Java 5 | 2004 | 제네릭스, 어노테이션, foreach 루프, 자동 박싱/언박싱, 열거형(enum), Varargs |
Java 6 | 2006 | 성능 개선, 스크립팅 API, JDBC 4.0, Java 컴파일러 API |
Java 7 | 2011 | switch문에서 문자열 사용, try-with-resources, 다이아몬드 연산자, NIO.2 |
Java 8 | 2014 | 람다 표현식, 스트림 API, 새로운 날짜 시간 API, 인터페이스의 디폴트 및 정적 메서드 |
Java 9 | 2017 | 모듈 시스템(JPMS), JShell, 개선된 스트림 API |
Java 10 | 2018 | 로컬 변수 타입 추론(var), 응용 프로그램 클래스-데이터 공유(Class-Data Sharing) 확장 |
Java 11 | 2018 | HTTP 클라이언트 표준화, 새로운 가비지 컬렉터, TLS 1.3 지원, 확장된 유니코드 언어 태그 지원 |
Java 12 | 2019 | 새로운 가비지 컬렉터, 개선된 스위치 표현식 |
Java 13 | 2019 | 텍스트 블록, 새로운 가비지 컬렉터, ZGC와 Shenandoah |
Java 14 | 2020 | 패턴 매칭(인스턴스에 대한), 레코드(프리뷰), 개선된 NullPointerException 메시지, 새로운 가비지 컬렉터 |
Java 15 | 2020 | 히든 클래스, 텍스트 블록, ZGC와 Shenandoah GC 개선, 패턴 매칭 및 레코드(프리뷰) |
Java 16 | 2021 | 레코드(표준), 패턴 매칭(인스턴스에 대한, 표준), JEP 338: Vector API (Incubator) |
Java 17 | 2021 | 성능, 안정성, 보안 개선, 패턴 매칭 및 레코드(표준), 새로운 macOS 렌더러, macOS AArch64 포트, 람다 개선 |
Java에 대해서 아직 배우지 않은 상태에서 위 표를 제시하는 이유는 Java가 오랜 기간동안 꾸준히 프로그래밍 언어로서 발전해왔다는 사실을 보여주기 위함입니다.
1.3. Java 플랫폼 생태계
1.3.1. Java 플랫폼
Java 플랫폼은 소프트웨어 개발 및 실행 환경을 제공하는 포괄적인 프레임워크입니다. Java 플랫폼은 응용 프로그램 개발 속도를 높이는 데 도움이 되는 API(Application Programming Interface) 및 서비스 모음을 포함합니다. 1995년 Sun Microsystems에 의해 처음 발표된 이후로, Java는 전 세계적으로 널리 사용되고 있습니다. Java 플랫폼에는 Java SE(Standard Edition), Java EE(Enterprise Edition), Java ME(Micro Edition) 등이 포함됩니다. Java는 Java 플랫폼의 모든 영역에서 사용할 수 있는 프로그래밍 언어입니다.
Java 플랫폼은 다음과 같이 정리할 수 있습니다:
- 무료, 오픈 소스, 크로스 플랫폼 개발 환경
- JVM(Java Virtual Machine)을 포함하는 런타임 환경
- 다양한 언어 지원: Java를 주 언어로 하며, Kotlin, Scala 등 JVM 기반의 언어도 지원
- 웹, 데스크톱, 모바일, 게임, IoT, 클라우드 등 모든 영역의 개발 환경 제공
1.3.2. Java SE (Standard Edition)
Java SE는 Java의 표준 에디션으로, 데스크톱 및 서버 환경을 위한 핵심 기능을 제공합니다. Java SE는 Java 언어의 기본 API, Java Virtual Machine(JVM), 그리고 Java Runtime Environment(JRE)를 포함합니다.
1.3.3. Java EE (Enterprise Edition)
Java EE는 엔터프라이즈급 응용 프로그램 개발을 위한 확장된 기능을 제공합니다. 이는 분산 컴퓨팅, 멀티티어 아키텍처, 웹 서비스 등을 포함하여 기업 환경에서의 복잡한 비즈니스 로직 처리에 최적화되어 있습니다.
1.3.4. Java ME (Micro Edition)
Java ME는 모바일 및 임베디드 시스템을 위한 Java의 축소된 버전입니다. 이는 제한된 자원을 가진 장치에서도 Java 기반의 애플리케이션을 실행할 수 있도록 설계되었습니다.
1.3.5. JavaFX
JavaFX는 리치 인터넷 애플리케이션(RIA)을 개발하기 위한 Java의 프레임워크입니다. 이는 데스크톱, 모바일, TV 등 다양한 플랫폼에서 고품질의 그래픽과 미디어 기능을 제공합니다.
1.3.6. 안드로이드
Java는 안드로이드 운영 체제의 주요 개발 언어 중 하나입니다. 안드로이드 애플리케이션은 대부분 Java를 사용하여 개발되며, 안드로이드 SDK는 Java API를 광범위하게 제공합니다.
1.4. 이 강의의 범위
이 강의에서는 Java 및 Java 플랫폼으로 할 수 있는 많은 부분 중에서 Java의 기초에 대해서 다룹니다.
1.5. 요약
프로그래밍을 학습할 때 처음으로 Java를 선택했다면 이는 탁월한 선택 중 하나입니다. Java는 가장 현대적인 프로그래밍 문법과 도구를 제공하고 모든 영역의 프로그래밍을 가능하게 해줍니다. 이 강의 전체를 통해서 Java 프로그래밍 언어를 사용하여 프로그램을 작성할 수 있는 기초를 완성해 나가도록 하겠습니다.