본문 바로가기

Java

(31)
Java Advanced Programming Quiz 퀴즈 1: 제너릭 인터페이스 구현 문제: Transformer라는 제너릭 인터페이스를 정의하고, 이를 구현하는 StringToLengthTransformer 클래스를 작성하세요. Transformer 인터페이스는 하나의 메소드 T transform(F from)을 가집니다. StringToLengthTransformer 클래스는 문자열을 받아 그 길이를 반환해야 합니다. public interface Transformer { T transform(F from); } public class StringToLengthTransformer implements Transformer { @Override public Integer transform(String from) { return from.length();..
Scope Scope 프로그래밍 언어에서 scope(범위)는 변수와 함수의 유효 범위를 의미합니다. 즉, 어떤 부분에서 변수나 함수를 사용할 수 있는지를 결정합니다. 일반적으로 프로그램은 여러 개의 블록(block)으로 구성됩니다. 블록은 중괄호({})로 둘러싸인 코드의 영역을 말하며, 주로 조건문(if문, switch문 등)이나 반복문(for문, while문 등), 함수 등에서 사용됩니다. scope는 변수와 함수의 선언 위치와 관련이 있습니다. 주요한 scope 유형은 다음과 같습니다: 전역 범위(Global scope): 전역 범위에 선언된 변수와 함수는 프로그램의 어느 곳에서든지 접근할 수 있습니다. 전역 변수는 프로그램 전체에서 공유되며, 전역 함수는 어디서든 호출할 수 있습니다(자바는 전역변수를 지원하지..
Package Package 자바에서 `package` 키워드는 클래스를 패키지에 속하도록 정의하는 데 사용됩니다. 패키지는 클래스들을 논리적으로 그룹화하고, 클래스들 간의 이름 충돌을 방지하고, 코드의 구조화를 도와주는 역할을 합니다. 여러 가지 이유로 `package` 키워드를 사용하는 이유는 다음과 같습니다: 이름 충돌 방지: 패키지는 동일한 이름을 가진 클래스들을 구분할 수 있도록 해줍니다. 서로 다른 패키지에 속한 클래스들은 같은 이름을 가질 수 있습니다. 이를 통해 다른 패키지에서 동일한 이름의 클래스를 사용할 때 이름 충돌을 방지할 수 있습니다. 코드 구조화: 패키지는 클래스들을 그룹화하여 코드를 구조화하는 데 도움을 줍니다. 관련된 클래스들을 하나의 패키지에 포함시킴으로써 코드의 가독성과 유지 보수성을 ..
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) 컴파일러, 가비지 컬렉터 등의 구성 요소로 구성됩니다. 클래스 로더는 자바 클래스 파일을 로드하여 메모리에 ..