[JAVA 기초부터 훑어보기] 01. 자바란 무엇인가?

2023. 1. 9. 23:00JAVA(자바)

1. 프로그래밍 언어 

- 소스코드: 인간이 프로그래밍 언어를 사용하여 원하는 작업을 텍스트로 기술한 것

- 소스파일: 소스코드가 파일에 저장된 것 

- 오브젝트 파일: 컴파일러가 소스파일을 기계어로 변환하여서 저장한 파일

 

2. 자바 가상 기계

(1) 자바의 실행 과정

자바 실행 과정

- 컴파일러는 자바 프로그램을 가상 기계의 명령어로 변환한다. 자바 가상 기계는 가상 기계의 명령어를 실제 기계의 명령어로 변환한다. 

- 보통의 프로그래밍 언어는 소스 코드가 컴파일러에 의해 기계어로 변환되면 컴퓨터에서 바로 실행 가능하다

- But! 자바 컴파일러는 특정한 컴퓨터를 위한 코드를 바로 생성하지 않는다. 대신 가상적인 기계를 위한 코드를 생성한다. 이 코드는 바이트 코드(byte code)라고 불린다. 

 

※ JIT(just-in-time) 

- 자바는 실행 때마다 바이트 코드를 해석하여야 하기 때문에 CPU 처리를 많이 요하는 프로그램의 경우 C언어보다 5배 정도 느린 단점을 가지고 있다 그래서 등장한 것이 바로 JIT

- JIT 컴파일러는 자바 코드를 실제 컴퓨터의 기계어로 직접 변환하는 컴파일러로서 인터프리트 과정 없이 프로그램이 직접 실행될 수 있도록 만든다. 

//원래 자바 코드(Original JAVA Code)

public class Hello{
	public static void main(String[] args){
    System.out.println("Hello");
    }
}

//바이트 코드(byte Code)
Compiled from "Hello.java"
public class Hello extends java.lang.Object
public Hello();
	Code:
    0: aload_0
    1: invokespecial	#1; //Method java/lang/Object. "<init>":()V
    4: return
    
 public static void main(java.lang.String[]);
 	Code:
    0: getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
    3: ldc	#3; //String Hello World!
    5: invokevirtual	#4; //Method java/io/PrintStream.println:
    							(Ljava/lang/String;)V
    
    8: return
}

 

(2) 자바 가상 기계란?

- 가상적인 기계를 위한 코드인 바이트 코드가 생성되면 이 바이트 코드를 해석하여 실행하기 위한 기계

- 운영체제와 하드웨어를 프로그램으로부터 숨길 수 있다. 

- 자바 가상 기계는 자바 컴파일러가 코드를 생성할 대상이 되는 추상화된 기계의 명세에 의하여 소프트웨어로 작성됨

※ 왜 바이트 코드를 생성하고 그 후에 자바 가상 기계를 통해 해석하여 실행하는 2단계를 거칠까?
- 그 이유는 바로 응용 프로그램들을 다시 컴파일 하지 않아도 모든 컴퓨터에서 실행되게 하기 위해서이다. 
바이트 코드는 일종의 중간 코드로서 특정 컴퓨터의 기계어와 일치하지는 않지만, 어떠한 기계어로도 쉽게 변환이 가능하다. 
- 자바 가상 기계만 가지고 있다면 어떤 바이트 코드도 컴파일할 필요없이 실행됨!
- 자바 가상 기계는 많은 운영체제에서 지원됨

 

(3) 자바 플랫폼 

- 플랫폼(platform)이란 프로그램이 실행되는 하드웨어나 소프트웨어 환경

- 2가지가 존재(자바 가상 기계, 자바 응용 프로그램 인터페이스)

- API와 자바 가상 기계는 프로그램과 하드웨어를 분리하는 역할을 한다. 

- 단점: 실제 기계의 명령어들로만 구성된 네이티브 코드(native code)보다 속도가 느리다(그러나 최근에는 가상 기계 기술의 발전으로 꽤 빨라짐)

자바 플랫폼

3. 자바의 역사 

(1) 자바의 탄생 

- 제임스 고슬링과 Green 연구팀이 개발

 

(2) 탄생 배경

- 가정용 전자 제품에 사용할 수 있는 작은 컴퓨터 언어를 설계하기를 원했는데, 가정용 전자 제품에 들어가는 컴퓨터는 일반 컴퓨터보다 파워와 메모리가 부족하므로 간결한 언어가 필요했다 => 간단하고 버그가 없으며 네트워크 기능이 내장된 프로그램을 작성하는 언어를 개발! => 이것이 자바!

- 전자 제품은 다양한 CPU로 만들어지므로 특정한 CPU에 의존해서는 안됨! => 가상 기계 개념 출현

※ Green 프로젝트
- 가정용 전자제품을 더 똑똑하게 만들고 다른 가전 제품과 통신을 할 수 있는 기능을 내장하는 프로젝트

 

(3) 자바의 특징

- 객체 지향 프로그래밍 언어 

- 월드 와이드 웹의 등장과 함께 웹 기반의 응용 프로그램에는 자바와 같은 기계 중립적인 언어가 이상적이라는 것을 발견하며 폭발적인 인기를 얻기 시작

- 한번만 작성하고 모든 곳에서 실행시키세요(Write Once, Run Everywhere) => 자바의 슬로건 문구

- 포인터 연산을 제거/유지 보수를 힘들게 하였던 중복 정의, 다중 상속 등의 복잡한 기능을 제거함

- c++의 복잡한 기능을 제거하고, c++에서 제공되지 않는 자동 메모리 관리 기능, 멀티 스레드, 객체 지향적인 방법으로 제작된 방대한 라이브러리를 무료로 제공함

더보기

※ 자바 개발진이 공개한 자바 언어 설계 목표 11가지

ⓐ 단순

ⓑ 객체 지향 

ⓒ 고성능

 견고

 안전

 컴퓨터 구조에 중립적

 이식 가능

 인터프리트 방식

 멀티 스레드 지원

ⓙ 동적

 분산 처리 지원

 

(4) 자바로 만들 수 있는 것

- 자바 애플리케이션

- 자바 애플릿: 웹 브라우저 안에서 실행되는 프로그램, HTML 문서 안에서 애플릿을 지정하면 웹 서버로부터 다운로드되어서 클라이언트 컴퓨터에서 실행된다

- 자바 서블릿: 서블릿은 웹 서버에서 동작하는 서버 모듈로서 클라이언트의 요구를 받아서 그에 대한 처리를 한 후에 실행 결과를 HTML 문서 형태로 클라이언트 컴퓨터로 전송한다. 

- JSP(Java Server Page): 자바를 기반으로 동적인 웹페이지를 구축할 수 있는 서버-사이드 스크립트 언어이다. 자바 서블릿을 기반으로 한다.

- 자바 빈즈: 자바로 작성된 컴포넌트를 자바 빈즈라고 한다. 컴포넌트는 재사용이 가능하고 조립하면 어플리케이션을 빠르게 만들 수 있다.

- 안드로이드 애플리케이션: 스마트폰의 운영체제 중의 하나인 안드로이드 운영 체제로는 리눅스를 사용하지만 운영 체제를 제외한 안드로이드 SDK의 나머지 부분은 모두 자바로 작성되어 있다.

 

예제)

1. 자바의 가상 기계와 바이트 코드에 대하여 설명하라 

2. 자바가 플랫폼 독립적인 수 있는 것은 무엇 때문인가?

3. 자바 어플리케이션과 자바 애플릿은 어떻게 다른가?

4. 자바 프로그램을 컴파일하고 실행시키는 과정을 개념적으로 설명하라

5. 현재 자바의 최신 버전이 무엇인지를 말하라

6. Java ME, Java SE, Java EE, Java FX의 용도를 말하라

7. 웹 서버에서 동작하는 서버 모듈로서 자바로 작성된 것을 무엇이라고 하는가?

8. 자바 언어로 작성이 가능한 애플리케이션에는 어떤 것들이 있는가?