사람과 컴퓨터가 대화하기 위해서는 사람의 언어와 기계어의 다리 역할을 하는 프로그래밍 언어가 필요하다.
고급 언어란 컴퓨터와 대화할 수 있도록 만든 언어 중에서 사람이 쉽게 이해할 수 있는 언어를 말한다.
고급 언어로 작성된 소스는 컴퓨터가 바로 이해할 수 없기 때문에 컴파일이라는 과정을 통해서 컴퓨터가 이해할 수 있는 0과 1로 이루어진 기계어로 변환 후 컴퓨터가 사용하게 된다.
반대로 저급 언어란 기계어에 가까운 언어를 말하는데, 대표적으로 어셈블리어가 저급 언어에 속한다.
고급언어들로 작성된 내용을 소스라고 부르고, 이 소스는 컴파일러라는 소프트웨어이 의해 기계어로 변환된 후 컴퓨터에서 실행할 수 있게 된다.
1.2 자바란?
1.2.1 자바의 특징
이식성이 높은 언어이다
이식성이란 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다.
자바 실행 환경(JRE)이 설치되어 있는 모든 운영체제에서 실행 가능하다.
객체 지향 언어이다.
프로그램 개발 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법을 객체 지향 프로그래밍이라고 한다.
객체를 위해 설계도인 클래스를 작성해야 하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다. 자바는 아무리 작은 프로그램이라도 객체를 만들어 사용한다.
처음부터 객체를 고려하여 설계되었기 때문에 객체 지향 언어가 가져야 할 캡슐화, 상속화, 다형성 기능을 완벽하게 지원하고 있다.
함수적 스타일 코딩을 지원한다.
함수적 프로그래밍을 위해 람다식을 자바 8부터 지원한다. 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하는데 쉬워지고, 코드가 매우 간결해 진다.
메모리를 자동으로 관리한다.
자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되어있으며, 메모리는 자바가 직접 관리한다. 객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기를 실행시켜 자동적으로 사용하지 않는 객체를 제거시켜준다.
다양한 어플리케이션을 개발할 수 있다.
자바는 다양한 운영체제에서 이용할수 있는 개발도구와 API를 묶어 에디션 혈태로 정의하고 있다.
Jave SE(Standard Edition) - 기본 에디션
Java SE는 자바 프로그램들이 공통적으로 사용하는 자바 가상 기계(JVM : Java Virtual Machine)를 비롯해서 자바 프로그램 개발에 필수적은 도구와 라이브러리 API를 정의한다. 클라이언트와 서버 프로그램에 상관 없이 자바 프로그램을 개발하고 실행하기 위해서는 반드시 Java SE의 구현체인 자바 개발 키트(JDK:Java Development Kit)를 설치해야 한다.
Java EE(Enterprise Edition) - 서버용 어플리케이션 개발 에디션
Java EE는 분산 환경(네트워크, 인터넷)에서 서버용 어플리케이션을 개발하기 위한 도구 및 라이브러리 API를 정의한다. 서버용 애플리케이션으로는 Servlet/JSP를 이용한 웹 어플리케이션, 분산 처리 컴포넌트인 EJB(Enterprise Java Bean) 그리고 XML 웹 서비스(Web Service) 등이 있다.
멀티스레드(Multi-Thread)를 쉽게 구현할 수 있다.
하나의 프로그램이 동시에 여러가지 작업을 처리해야 할 경우와 대용량 작업을 빨리 처리하기 위해 서브 작업으로 분리해서 병렬처리하려면 멀티스레드 프로그래밍이 필요하다.
프로그램이 실행되는 운영체제에 따라서 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어에 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 상관없이 멀티 스레드를 쉽게 구현할 수 있다.
동적로딩(Dynamic Loading)을 지원한다.
자바어플리케이션은 여러개의 객체가 서로 연결되어 실행하는데, 이 객체들은 클래스로부터 생성된다. 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적으로 로딩해서 객체를 생성한다. 또한 개발 완료 후 유지보수(수정)가 발생하더라도 해당 클래스만 수정하면 되므로 전체 어플리케이션을 다시 컴파일 할 필요가 없다.
막강한 오픈소스 라이브러리가 풍부하다.
자바는 오픈소스 언어이기 때문에 자바 프로그램에서 사용한느 라이브러리 또한 오픈소스가 넘쳐난다.
1.2.2 자바 가상 기계(JVM)
운영체제는 자바 프로그램을 바로 실행할 수 없는데, 그 이유는 자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문에 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하다.
이것이 자바 가상기계 (JVM:Java Virtual Machine)이다. JVM은 실 운영체제를 대신 해서 자바 프로그램을 실행하는 가상의 운영체제 역할을 한다.
영어권에서는 컴퓨터를 흔히 기계(Machine)이라고 하기 때문에 '자바를 실행시키는 가상의 기계'라고 해서 'JVM'이라는 용어가 나오게 된 것이다.
바이트 코드는 모든 JVM에서 동일한 실행 결과를 보장하지만, JVM은 운영체제에 종속적이다. 자바 프로그램을 운영체제가 이해난 기계어로 변역해서 실행해야 하므로 JVM은 운영체제에 맞게 설치되어야 한다.
자바 프로그램은 확장자가 .java인 파일을 작성하는 것부터 시작된다. 이것을 소스파일이라고 하는데, 이 소스파일을 컴파일러로(javac.exe)로 컴파일하면 .class인 바이트 코드 파일이 생성된다. 바이트 코드 파일은 JVM 구동 명령이(java.exe)에 JVM에서 해석되고 해당운영체제에 맞게 기계어로 번역된다. 바이트 코드는 하나지만, JVM에 의해서 번역되는 기계어는 운영체제에 따라서 달라진다.
자바소스파일(.java) -> (컴파일러:javac.exe) -> 바이트 코드 파일(.class) -> (자바가상기계:java.exe) -> 기계어 -> 실행