티스토리 뷰
Java 를 제대로 공부해본 적은 없다. 대학교 3학년 시절 안드로이드 어플리케이션을 만들기 위해서 교수님이 Head First Java를 참조하여 만들어 주신 강의자료를 본게 전부이다.
물론 C++ 을 이미 사용하고 있었기 때문에 기본적인 문법을 익히는 방법은 어렵지 않았다.
하지만, 어떠한 방식으로 동작하는지 정확하게 알지 못했고 기본을 모를 땐 빨리 밑으로 내려가 공부를 시작하는게 가장 빠른 길이라는 생각이 들었다. 그래서 "Java의 정석" 책을 보면서 처음부터 공부하고자 한다.
Java 란?
Java 란 썬 마이크로시스템즈 에서 처음 개발한 객체지향 프로그래밍 언어이다.
Java 는 가전제품 SW 를 개발하기 위해 처음 개발 된 언어이다. 가전제품이나 PDA와 같은 소형기기에 사용될 목적이었으나 여러 종류의 운영체제를 사용하는 컴퓨터들의 통신(인터넷)이 등장하면서 개발 방향을 바꾸었다고 한다. 썬에서 개발한 뒤 Oracle 에 인수되었다고 한다.
자바언어의 특징들을 나열해 보면, 운영체제 독립적이다, 객체지향 언어이다, 멀티쓰레드를 지원한다, 네트워크와 분산처리를 제공한다, 동적로딩을 지원한다, 자동 메모리 관리(Garbage Collection)를 지원한다 등이 있다.
Java 장단점
장점
- 자바 프로그램은 JVM 위에서 실행되기 때문에 운영체제에 독립적이다.
- Garbage Collection이 있기 때문에 메모리 할당을 프로그래머가 신경쓸 필요가 없다.
- 동적 로딩을 지원한다. 실행 시에 모든 클래스가 로드되는 것이 아닌, 필요한 시점에 클래스가 로드 되기 때문에 일부 클래스가 변경되어도 전체를 컴파일하지 않아도 되는 유연한 구조를 가지고 있다.
- 멀티쓰레드를 제공하기 때문에 분산처리가 가능하다.
단점
- 속도가 느리다? Java 는 Compile 된 .class(Byte code) 가 JVM이 인식할 수 있는 언어이며, 이를 다시 JVM이 하드웨어 Instruction(binary) 로 변경 한 후 실행하는데, Java는 Interpreter 언어 이기 때문에 명령어 1개 번역 → 수행 과정으로 실행된다. 그러나 현재는 JIT(Just In Time) Compiler 의 개발로 전체 명령어를 컴파일 한 후 수행되도록 변경되어서 속도가 굉장히 빨라졌다.
- 하드웨어에 연결하여 제어할 수 없기 때문에(가상 머신 이용 JVM) 직접 하드웨어를 정밀하게 조정해야 하는 프로그램 개발에는 적합하지 않다.
Java 의 특징
1. 운영체제 독립적이다
Java는 JVM 위에서 실행되기 때문에 운영체제와 의존성이 없다. 대신 운영체제마다 JVM은 종속적이기 때문에 수많은 OS에 대한 JVM 개발이 필수적이다.
2. 객체지향 언어이다
객체지향 프로그래밍 언어로 객체지향 특성인 상속, 캡슐화, 다형성이 잘 적용되어 있다.
3. 멀티쓰레드를 지원한다
일반적으로 멀티쓰레드는 운영체제에 따라 구현방법과 처리 방식이 다르다. 그러나 자바에서는 이에 영향을 받지 않으며 쓰레드 스케쥴링을 자바 인터프리터가 실행한다.
4. 네트워크와 분산처리를 지원한다
다양한 네트워크 API를 제공하며, 인터넷 대규모 분산 시스템 개발에 효과 적이다. (왜 효과적인건지는 좀 더 알아봐야 겠다)
5. 동적로딩을 지원한다
실행 시에 모든 클래스가 로드되는 것이 아닌 필요한 시점에 로드되는 형태이다. 따라서, 일부 클래스가 변경되어도 전체 컴파일을 하지 않아도 되기 때문에 유연한 구조를 가지고 있다.
6. 자동 메모리 관리(Garbage Collection)를 지원한다
자바는 프로그램이 실행되는 동안 Garbage Collector가 자동으로 메모리를 관리해 주기 때문에 별도로 메모리 관리가 필요가 없다. C++ 개발자 입장에서는 굉장히 부러운 기능이다. 계속 실행되는 부담?은 있지만 프로그램 개발에 집중 할 수 있게 해주며, 최적화도 가능한 것으로 알고 있다. (이 부분도 좀 더 심도있게 알아볼 필요가 있어 보인다)
Java Virtual Machine (JVM)
JVM 은 Java byte code를 실행하는 가상 머신이다. (가상 머신이란 실재하는 컴퓨터 상에 소프트웨어로 논리적으로 만들어낸 컴퓨터를 말한다.) 이 JVM 덕분에 자바는 운영체제 독립적이라는 특성을 갖게 된다. 이는 애플리케이션이 실행될 때, OS 위에 JVM이라는 Layer가 하나 생기는 것과 동일하다고 보면 된다.

Java Applicaiton이 작성되고 실행되는 과정
자바프로그램이 실행되는 순서를 아주 간략하게 살펴보면 아래와 같다. 자바 프로그램(.java)을 작성하고 이를 자바 컴파일러가 bytecode(.class) 로 변환시킨다. class 파일을 자바 인터프리터가 하드웨어가 식별 할 수 있는 언어(binary)로 해석해서 실행된다.

'Language > Java' 카테고리의 다른 글
| 더 자바 코드를 조작하는 다양한 방법 강의를 들어가며.. (0) | 2021.08.09 |
|---|
- Total
- Today
- Yesterday
- Prometheus Operator
- OneToOne
- Kafka
- minikube node add
- docker-compose
- springboot3.x
- producer
- cpus
- 데스크톱 애플리케이션
- DD파일
- minikube
- MySQL 외부 IP
- kubernetes
- 애노테이션 프로세서
- 웹 애플리케이션
- StreamBridge
- Spring Cloud Stream
- Java 장단점
- ExpectedException
- node add
- 특정 ip
- consumer
- Java 특징
- Java 란
- Servlet
- WEB-INF
- 서버 클라이언트
- 애플리케이션 변화 과정
- Servlet Container
- ServiceMonitor
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
