반응형
1. 자바란?
- 자바는 썬 마이크로시스템즈에서 개발하여 1995년에 공식적으로 발표한 객체 지향 프로그래밍 언어이다.
- 자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능하기 때문에 운영체제에 따라 프로그램을 전혀 변경하지 않고도 실행이 가능하다.
- 이러한 장점으로 인해 자바는 다양한 기종의 컴퓨터와 운영체제가 공존하는 인터넷 환경에 적합한 언어로써 인터넷의 발전과 함께 많은 사용자층을 확보할 수 있었다.
2. 자바언어의 특징
- 운영체제에 대해 독립적
기존 언어는 한 운영체제에 맞게 개발된 프로그램을 다른 종류의 운영체제에 적용하기 위해서 많은 노력이 필요하였지만, 자바에서는 그런 노력을 하지 않아도 된다. 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM (Java Virtual Machine)하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다. - 객체 지향 언어
객체 지향 프로그래밍( OOP : Object Oriented Programming )이란 프로그램을 개발하는 기법으로, 부품에 해당하는 객체들을 먼저 만들고 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법을 말한다. 이 기법으로 이루어진 언어를 객체 지향 언어라고 하는데, 자바는 100% 객체 지향 언어이다. 객체를 만들기 위해 설계도인 클래스를 작성하고 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다. 또한 객체 지향 언어가 가져야 할 추상화, 캡슐화, 상속, 다형성 기능을 완벽하게 지원한다. - 자동 메모리 관리( GC : Garbage Collector )
자바로 작성된 프로그램이 실행되면 가비지 컬렉터가 자동으로 메모리 관리를 해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 된다. 필요 없는 메모리가 나오면 자동으로 먹어줘서 다시 사용할 수 있게 된다. 자동으로 메모리를 관리한다는 것이 다소 비효율적인 면도 있지만 프로그래머가 보다 프로그래밍에 집중할 수 있도록 도와준다. - 멀티스레드( Multi Thread ) 지원
멀티스레드의 지원은 사용되는 운영체제에 따라 구현 방법의 차이가 존재하고, 처리하는 방식도 다르다. 그러나 자바로 멀티스레드 프로그램을 개발하는 경우 자바에서 제공하는 표준 라이브러리(Java API)를 통해 쉽게 구현이 가능하다.
3. JVM( Java Virtual Machine )
- JVM이란 Java Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다.
- 자바는 완전한 기계어가 아닌 바이트 코드이기에 자바 바이트코드를 해석하고 실행하는 것이 필요하다.
그리고 위에서 말했듯이 자바는 운영체제에 대해서 독립적인 특징을 가지고 있다.
이러한 특징을 구현하기 위해 JVM이 필요하다. 단순하게 말하면 컴파일된 코드(바이트 코드)를 실행시켜주는 가상의 컴퓨터이다. - 운영체제 위에서 실행되기 때문에 JVM 자체는 운영체제에 종속적이다.
즉, 운영체제에 따라 호환되는 JVM을 실행해야한다.
자바 코드가 JVM에 전달되는 과정을 살펴보면,
- 작성한 자바 소스(. java)를 자바 컴파일러(javac)를 통해 자바 바이트 코드(. class)로 컴파일한다.
- 컴파일된 바이트 코드(. class)를 JVM의 클래스 로더(Class Loader)에게 전달한다.
- 클래스 로더는 동적 로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area), 즉 JVM의 메모리에 올린다.
- 실행 엔진(Execution Engine)은 JVM메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행한다.
즉, JVM은 자바 바이트 코드(. class 파일)를 운영체제에 특화된 코드로 변환하여 실행한다.
반응형
'웹개발 > JAVA' 카테고리의 다른 글
[JAVA] 제어문( 조건문, 반복문 ) (0) | 2022.01.12 |
---|---|
[JAVA] 연산자( Operator ) (2) | 2022.01.08 |
[JAVA] 입력메서드( Scanner ), 출력메서드( Print ) (0) | 2022.01.07 |
[JAVA] 변수 및 형변환( casting ) (1) | 2022.01.06 |
[JAVA] 자바 프로그램 개발 및 순서 (0) | 2022.01.06 |