자바 애플리케이션을 실행 했을 때 일어나는 일들Language/Java2024. 1. 6. 18:54
Table of Contents
728x90
자바란?
자바는 1995년에 썬 마이크로시스템즈(Sun Microsystems)에서 개발한 객체지향 프로그래밍 언어입니다. 이는 '한 번 작성하면 어디에서나 실행할 수 있다(Write Once, Run Anywhere)'는 철학을 가지고 있으며, 이를 가능하게 하는 기술적인 요소로는 JVM(Java Virtual Machine)과 바이트코드(Bytecode)가 있습니다.
특징
- 객체 지향 언어 : 자바는 순수한 객체 지향 언어로, 상속, 캡슐화, 다형성 등의 객체 지향 개념을 전부 지원해 준다.
- 메모리 관리 : 자바는 가비지 컬렉터를 통해 자동 메모리 관리를 지원해 준다.
- 플랫폼 독립성 : 자바 애플리케이션은 JVM 위에서 실행되므로, JVM이 설치된 모든 플랫폼에서 동일하게 동작한다.
- 멀티스레드 지원 : 자바는 멀트스레드 프로그래밍을 지원하여, 복잡한 GUI 애플리케이션과 실시간 시스템 개발에 유리하다.
- 네트워크 지원 : 자바는 네트워크 프로그래밍을 위한 강력한 라이브러리를 제공한다.
장점
- 이식성 : JVM이 설치된 모든 플랫폼에서 자바 애플리케이션을 실행할 수 있다.
- 객체 지향 : 객체 지향 개념을 통해 개발자는 유지 보수가 쉽고, 재사용 가능한 코드를 작성할 수 있다.
- 메모리 관리 : 가비지 컬렉터를 통해 개발자는 메모리 누수에 대해서 크게 신경 쓰지 않고 개발에 전념할 수 있다.
- 안전성 : 자바는 타입 체크, 예외 처리, 가비지 컬렉션 등을 통해 안전하게 코드를 작성할 수 있도록 도와준다.
단점
- 성능 : 자바는 인터프리터 언어이므로, 컴파일 언어인 C, C++ 등에 비해 실행 속도가 느릴 수 있다.
- 메모리 소비 : 자바의 가비지 컬렉션은 편리하지만, 메모리 소비가 많은 단점이 있다.
- 시작 시간 : '클래스 로딩'이라는 과정 때문에 자바 애플리케이션의 시작 시간이 다소 오래 걸릴 수 있다.
- 비용 : 상대적으로 높은 메모리와 CPU 요구 사항으로 인해, 자바를 사용하는 경우 비용이 비싸질 수 있다고 한다.
어떤 일이 일어날까?
- 코드 컴파일 : 자바 소스 코드(. java 파일)는 자바 컴파일러에 의해 바이트 코드(. class 파일)로 변환된다. 이 바이트 코드는 플랫폼에 독립적인 코드로, JVM(Java Virtual Machine) 자바 가상 머신...? 에서 실행될 수 있다.
- JVM 시작 : 자바 인터프리터(interpreter)는 JVM을 시작한다. JVM은 운영 체제(OS) 위에서 동작하며, 자바 애플리케이션을 OS가 이해할 수 있는 기계어로 번역해 준다.
- 클래스 로딩 : JVM은 클래스 로더(class loader)를 사용하여 필요한 클래스 파일들을 메모리에 로드한다. 이 과정에서 클래스의 정적 변수가 메모리에 할당되고, 정적 초기화 블록이 실행되게 된다.
- 메인 메서드 실행 : 클래스가 로딩된 후, JVM은 애플리케이션의 메인 메서드를 호출하여 실행을 시작한다. 메인 메소드는 애플리케이션의 진입점(entry point)으로 작동한다.
- 객체 생성 및 메소드 호출 : 메인 메서드에서 다른 객체들이 생성되고, 메서드들이 호출된다. 이 과정에서 동적 메모리 할당, 가비지 컬렉션, 예외 처리 등이 이루어진다.
- 애플리케이션 종료 : 모든 작업이 완료되면, JVM은 종료되고, 할당된 모든 리소스가 해제된다.
그래서?
이런 과정을 통해서 자바 애플리케이션은 플랫폼 독립적인 방식으로 실행이 된다고 한다.
즉, 같은 자바 코드를 다양한 운영체제에서 실행할 수 있다는 이야기다.
"한 번 작성하게 되면, 어디에서나 실행할 수 있다(Write Once, Run Anywhere)"
정리
처음 자바를 배울 때 강의를 통해서 자바는 JVM을 이용해서 사용한 다라 던 지 뭐 비슷한 내용들을 간단히 배웠었는데 당시에는 외계어처럼 들렸는데 조금 더 배우고 다시 들으니 아... 그렇구나... 까지는 가능한데 저 특징들을 적극적으로 활용해서 리소스나 뭐 그런 것들을 고려할 실력은 아직 아닌 것 같다는 생각이 들고 보니 좀 슬프다😂
728x90
'Language > Java' 카테고리의 다른 글
오버라이딩, 오버로딩 그게 뭔데요 (0) | 2024.01.11 |
---|---|
계산기 만들기 (0) | 2023.12.30 |
배열 (1) | 2023.12.20 |
가위, 바위 ,보 만들기 (1) | 2023.12.15 |
구구단 만들기 (0) | 2023.12.14 |
@Marty_ :: 소리 지르고 싶다.
쓰임 있는 사람이 되기 위해 노력 중입니다.