Java 24

Java | JAVA의 컴파일 과정

자바의 컴파일 과정 1. 소스코드 작성개발자는 Java언어로 작성된 소스파일(.java)을 생성합니다. 이 파일은 사람이 읽을 수 있는 형태의 고급 언어로 작성된 코드입니다.  2. 컴파일 단계 javac 명령어(Java Compiler)를 사용하여 소스 파일(.java)을 컴파일하면, JVM(Java Virtual Machine)이 이해할 수 있는 바이트코드 형태의 파일(.class)이 생성됩니다.  * 이 바이트코드는 플랫폼에 독립적이며, JVM에서 실행될 준비가 된 중간 형태의 코드입니다.  3. 클래스 로딩(Class Loading)JVM의 Class Loader가 생성된 .class 파일을 JVM 메모리로 로드합니다.  * 로드된 클래스는 실행에 필요한 메서드와 변수 등의 메타데이터를 포함하고 ..

Java 2024.12.20

PostgreSQL, Java | Java Map 객체를 저장할 때 발생하는 문제와 해결방법

문제 상황Spring과 MyBatis를 사용해 애플리케이션 개발 중,Java의 Map 객체를 PostgreSQL 데이터베이스에 저장하려고 하면 다음과 같은 에러를 만날 수 있습니다:org.postgresql.util.PSQLException: No hstore extension installed. 이 에러는 PostgreSQL에서 hstore 확장이 설치되지 않았거나,Map 객체를 저장할 적절한 방식으로 변환하지 않았기 때문에 발생합니다. responseBody = Map.of( "status", "error", "error_code", e instanceof HttpClientErrorException ? ((HttpClientErrorException) e).getStatusCode().v..

Java 2024.12.20

Java | ExecutorService와 Future를 활용한 병렬 처리 이해

1000만 건의 데이터 크롤링을 할 때, 사용한 자바의 멀티스레드 방식입니다:) 처음에 사이트도 느리고, 데이터의 총량도 가늠할 수 없었던 작업이었는데, 크롤링하다 보니, 사이트에 자꾸 요청을 보내서 서버 다운되기도 했고,그래서 사이트 운영자가 서버 업그레이드도 해주고.. 생각해보니, 정말 재밌던 작업이었어요 :)  이번 글은 이 작업에서 사용한 Java의 멀티스레드 방식을 정리해보려 합니다.  ExecutorService와 Future는 Java에서 병렬 작업을 효율적으로 관리하기 위한 도구입니다. 이 글에서는 Future.get()을 활용하여 작업의 결과를 처리하고 동기화하는 방법을 예제와 함께 설명하겠습니다. ExecutorService스레드 풀을 생성하고 관리하는 Java의 인터페이스입니다.비동기..

Java 2024.12.19

Java | JIT 컴파일러에 대해

JIT 컴파일러란?JIT(Just-In-Time) 컴파일러는 Java Virtual Machine(JVM)의 실행 엔진의 한 부분으로,바이트코드를 프로그램 실행 중에 기계어(Machine Code)로 변환하여 실행 속도를 높이는 역할을 합니다.JIT 컴파일러의 동작 과정바이트코드 해석 시작: JVM은 프로그램을 실행할 때, 바이트코드를 인터프리터를 통해 한 줄씩 해석합니다.프로파일링(Profile): JVM은 실행 중 자주 호출되거나 반복적으로 실행되는 핫스팟(Hotspot) 코드를 식별합니다.예: 반복문, 자주 호출되는 메서드 등.JIT 컴파일 시작: 핫스팟으로 식별된 코드는 JIT 컴파일러가 기계어로 컴파일하여 변환합니다.변환된 기계어는 캐싱되어 이후에는 인터프리터 없이 바로 실행됩니다.최적화: JI..

Java 2024.12.18

Java | HashSet이란? HashSet을 사용하기 좋은 상황(CT)

HashSet은 중복을 허용하지 않는 데이터 저장과 빠른 검색이 필요한 경우에 유용합니다.HashSet은 내부적으로 해싱(Hashing)을 사용하여 데이터를 관리하므로, 다음과 같은 특징과 장점을 가지고 있습니다.HashSet의 주요 특징중복된 값 저장 불가:동일한 값이 추가될 경우 무시됩니다.중복을 자동으로 제거해야 하는 경우 적합합니다.빠른 데이터 조회:내부적으로 해싱(Hashing)을 사용하여 데이터를 저장하고 검색하기 때문에, 평균적으로 O(1)의 시간 복잡도로 데이터를 검색할 수 있습니다.배열이나 리스트에서 탐색이 O(n)인데 비해 훨씬 효율적입니다.순서가 없음:HashSet은 순서를 유지하지 않으므로, 저장된 데이터의 순서는 보장되지 않습니다.데이터의 순서가 중요하지 않은 경우 적합합니다.Ha..

Java 2024.12.09

Java | 내장 메서드를 활용한 진법 변환 정리

Java에서는 숫자의 진법 변환을 매우 간단하게 처리할 수 있는 내장 메서드를 제공합니다.특히, 8진수, 10진수, 16진수와 같은 다양한 진법을 다룰 때 효율적입니다.이번 글에서는 Integer 클래스의 주요 메서드들을 활용해 진법 변환을 정리하겠습니다.1. Integer.parseInt(String s, int radix)parseInt 메서드는 문자열로 주어진 숫자를 지정된 진법(기수)으로 해석하여 10진수 정수로 변환합니다.사용법int decimal = Integer.parseInt("17", 8); // 8진수 '17'을 10진수로 변환System.out.println(decimal); // 출력: 15매개변수s: 변환하려는 숫자를 나타내는 문자열.radix: 숫자가 표현된 진법 (2, 8, 1..

Java 2024.12.09

CT | 백준 - 11286번 절대값 힙

https://www.acmicpc.net/problem/11286문제 설명이 문제는 정수들을 입력받아 다음과 같은 두 가지 작업을 수행하는 프로그램을 작성하는 것입니다.정수 입력: 정수 x를 입력받았을 때, x가 0이 아닌 경우 해당 숫자를 우선순위 큐에 추가합니다.0 입력: 만약 0이 입력되면, 현재 큐에 있는 수 중에서 절대값이 가장 작은 수를 출력하고 해당 수를 큐에서 제거합니다. 만약 절대값이 동일한 수가 여러 개 있다면, 그 중에서 가장 작은 수를 출력합니다. 큐가 비어있을 경우에는 0을 출력합니다.public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextI..

Coding Test 2024.08.27

JAVA | JVM(Java Virtual Machine)이란? JVM의 작동원리

JVM이란 무엇인가?JVM은 Java 애플리케이션을 실행하기 위한 가상 기계입니다. 직역하면 '자바를 실행하기 위한 가상 컴퓨터'라고 할 수 있습니다.이 가상 컴퓨터는 Java 프로그램이 운영체제(OS)와 독립적으로 실행될 수 있도록 도와줍니다. Java의 플랫폼 독립성과 JVMJava의 가장 큰 특징 중 하나는 OS에 종속되지 않는다는 점입니다. 이는 Java 프로그램이 다양한 운영체제에서 동일하게 동작할 수 있다는 의미입니다. 하지만, 이를 실현하기 위해서는 운영체제와 Java 프로그램 사이에서 중개 역할을 하는 무언가가 필요합니다. 이 역할을 수행하는 것이 바로 JVM입니다.  JVM은 CPU가 JAVA 프로그램을 인식하고 실행할 수 있도록 하는 가상 컴퓨터입니다. 실제 컴퓨터처럼 Java 애플리케..

Java 2024.08.21

Effective Java | Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라.

Effective Java 3/E 판을 읽고 정리한 기록입니다. "private 생성자나 열거타입으로 싱글톤을 보장한다"는 말은 객체지향 프로그래밍에서 사용되는 디자인 패턴 중 하나인 싱글톤(Singleton) 패턴을 의미합니다.  싱글톤 패턴은 애플리케이션에서 인스턴스가 단 하나만 생성되도록 보장하는 패턴입니다.  Private 생성자클래스의 생성자를 private 로 선언하여 외부에서 직접적으로 인스턴스를 생성할 수 없도록 합니다. 이는 외부에서 새로운 인스턴스를 생성하는 것을 막아, 오직 클래스 내부에서만 인스턴스를 생성할 수 있도록 합니다.  열거타입(Enum)Java에서는 열거타입을 이용해 싱글톤을 구현할 수 있습니다. 열거타입은 JVM에 의해 클래스가 로딩될 때 하나의 인스턴스로 보장되기 때문..

Effective Java 2024.03.28

Effective Java | Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라.

Effective Java 3/E 판을 읽고 정리한 기록입니다. "생성자에 매개변수가 많다면, 빌더를 고려하라"는 것은자바에서 객체를 생성할 때, 매개변수가 많은 경우, 가독성이 떨어지고 실수를 범하기 쉬워지며 코드 유지보수가 어려워질 수 있다는 의미입니다. 따라서 많은 매개변수를 가진 생성자 대신 객체를 생성하기 위한 빌더 디자인 패턴을 고려해야 한다는 것을 나타냅니다.  점층적 생성자 패턴(Telescoping constructor pattern) 점층적 생성자 패턴은 객체를 생성할 때 선택적 매개변수를 포함한 여러 개의 생성자를 제공하는 방식입니다. 이 패턴은 생성자의 매개변수 수가 늘어날수록 코드의 가독성과 유지보수가 저하될 수 있어, 선택적으로 사용되는 생성자를 제공해 불필요한 복잡성을 줄이는 ..

Effective Java 2024.03.27