본문 바로가기

분류 전체보기

(68)
Concurrency 1 자바 공식 Concurrency 튜토리얼 Thread 스레드(Thread)란 프로세스 내에서 실행되는 독립적인 실행 흐름을 말합니다. 프로세스는 운영체제로부터 자원을 할당받아 실행되는 프로그램의 인스턴스를 의미하며, 각각의 프로세스는 하나 이상의 스레드를 가질 수 있습니다. 스레드는 프로세스 내에서 코드 실행의 기본 단위로, 동시에 여러 작업을 수행할 수 있습니다. 프로세스는 자신만의 주소 공간, 파일 핸들, 자원 등을 가지고 있지만, 스레드는 프로세스의 자원을 공유하여 실행됩니다. 따라서 스레드는 프로세스 내에서 동시에 여러 작업을 처리하고 서로 협력하여 작업을 완료할 수 있습니다. 스레드는 동시성 (Concurrency)을 제공하여 작업의 처리 속도를 향상시키고, 병렬성 (Parallelism)을 통..
JVM 메모리 구조 자바 가상 머신(JVM)의 메모리 구조는 크게 다음과 같은 영역으로 나뉩니다: 메서드 영역 (Method Area) 힙 영역 (Heap) 자바 스택 (Java Stacks) PC 레지스터 (PC Registers) 네이티브 메서드 스택 (Native Method Stacks) 메서드 영역 메서드 영역은 JVM의 메모리 구조 중 하나로, JVM이 시작될 때 생성됩니다. 메소드 영역은 클래스의 메타데이터 즉, 클래스 레벨의 정보들을 저장하는 공간입니다. 클래스 레벨의 정보는 다음과 같습니다. 클래스 이름 수퍼클래스 이름 인터페이스 코드 메소드의 바이트 코드 런타임 상수 풀 필드와 메서드 데이터 생성자 메소드 정보 이러한 메타데이터 중에서 메소드 정보 부분은 해당 클래스에 정의된 모든 메소드에 대한 메타데이터..
All about JAVA Java Components: Java Platform, JDK, JRE, & Java Virtual Machine Java Platform Java 플랫폼은 Java 프로그래밍 언어로 작성된 애플리케이션을 실행하는 데 도움을 주는 소프트웨어나 프로그램의 모음입니다. Java 플랫폼은 Java 컴파일러, 라이브러리 세트 및 실행 엔진으로 구성됩니다. Java 플랫폼은 특정 운영 체제에 독립적이므로 Java 프로그래밍 언어는 플랫폼에 독립적인 언어로 알려져 있습니다. Java 플랫폼은 다음과 같은 구성 요소로 구성됩니다. Java language The Java Development Kit (JDK) The Java Runtime Environment (JRE) The Java Compiler The Ja..
Class Loader Class Loader 클래스 로더는 JVM에서 클래스 파일을 로드하고, 해당 클래스를 메모리에 정의하는 역할을 담당합니다. 자바에서는 클래스 로더(Class Loader)가 클래스당 하나씩 존재합니다. 자바에서 클래스 로더(Class Loader)가 클래스당 하나씩 존재하는 이유에는 몇 가지 이유가 있습니다. 이러한 클래스당 하나의 클래스 로더 구조는 자바 언어의 동작 원리와 안정성을 보장하는 데 도움이 됩니다. 네임스페이스 분리(Namespace Isolation): 각 클래스 로더는 독립된 네임스페이스를 가지고 클래스를 로드합니다. 클래스 로더마다 고유한 클래스 패스를 가지며, 같은 이름의 클래스라도 서로 다른 클래스 로더에 의해 로드될 수 있습니다. 이를 통해 서로 다른 버전의 동일한 클래스가 충..
Dynamic Proxy Classes Proxy[Proxy Pattern] Intent 프록시는 원본 객체에 대한 대체물이나 플레이스홀더를 제공하는 구조적 디자인 패턴입니다. 프록시는 원본 객체에 대한 접근을 제어하여, 원본 객체에 어떤 요청이 전달되기 전이나 후에 어떤 작업을 수행할 수 있게 합니다. Problem 원본 객체에 대한 접근을 제어하고 싶은 이유는 무엇일까요? 예를 들어, 시스템 자원을 대량으로 소비하는 거대한 객체(예를 들어, 데이터베이스 관련)가 있습니다. 이 객체는 때때로 필요하지만, 항상 필요한 것은 아닙니다. 데이터베이스 쿼리는 정말 느릴 수 있습니다. 이 문제를 해결하기 위해 지연 초기화를 구현할 수 있습니다: 이 객체를 실제로 필요할 때만 생성합니다. 그러므로 이 거대한 객체를 사용하는 모든 클라이언트는 지연된 초..
Reflection 자바에서 리플렉션(Reflection)이란, 실행 중인 자바 프로그램에서 클래스의 정보를 가져오고, 이를 통해 객체를 생성하거나 메서드를 호출하는 등의 동적인 작업을 수행하는 API입니다. 즉, 프로그램이 실행 중일 때도 클래스의 정보를 얻을 수 있으며, 이를 이용해 객체를 생성하고 메서드를 호출할 수 있습니다. 리플렉션은 다음과 같은 기능을 제공합니다. 클래스의 정보 가져오기: 리플렉션은 실행 중인 클래스의 정보(패키지, 클래스명, 상위 클래스, 인터페이스, 생성자, 메서드, 필드 등)를 가져올 수 있습니다. 객체 생성하기: 리플렉션은 클래스의 정보를 바탕으로 객체를 동적으로 생성할 수 있습니다. 즉, 클래스명을 문자열로 입력받아 객체를 생성할 수 있습니다. 메서드 호출하기: 리플렉션은 실행 중인 클래..
JVM JVM(Java Virtual Machine)은 자바 프로그램을 실행하는 가상 머신입니다. 자바 프로그래밍 언어는 컴파일된 바이트 코드를 JVM에서 실행되도록 디자인되어 있습니다. 이것은 자바 코드가 여러 플랫폼에서 동일한 방식으로 실행될 수 있도록 해줍니다. JVM은 자바 프로그램의 실행 환경을 제공합니다. 이것은 메모리 관리, 스레드 관리, 예외 처리 등을 포함합니다. 또한 JVM은 자바 코드를 해석하고 컴파일하여 해당 플랫폼의 네이티브 코드로 변환합니다. 이것은 자바 프로그램이 다른 플랫폼에서 실행될 수 있도록 해주는 중요한 기능입니다. JVM은 클래스 로더, JIT(Just-In-Time) 컴파일러, 가비지 컬렉터 등의 구성 요소로 구성됩니다. 클래스 로더는 자바 클래스 파일을 로드하여 메모리에 ..
자바 클래스 파일(feat. compiler) 컴파일러는 소스 코드를 CPU의 기계어로 변환해주는 프로그램입니다. 일반적으로 하이 레벨 프로그래밍 언어의 소스 코드는 인간이 이해하기 쉽도록 작성되어 있고, 기계어는 컴퓨터가 이해하기 쉬운 형태입니다. 컴파일러는 이 두 가지 형태의 코드를 변환하여 소스 코드를 실행 가능한 형태로 만들어줍니다. 컴파일러는 일반적으로 소스 코드를 읽어들여서 문법에 맞는지 검사하고, 코드를 분석하고, 중간 코드를 생성하고, 최종적으로 기계어 코드를 생성합니다. 이 과정을 컴파일링이라고 합니다. 컴파일러는 소스 코드를 기계어로 변환하는 과정에서 성능 최적화나 보안 검사 등의 기능을 수행할 수 있습니다. 이러한 기능들을 통해 컴파일러는 프로그램의 실행 속도를 높이거나 보안성을 높일 수 있습니다. 컴파일러는 다양한 프로그래밍 언..