분류 전체보기 99

CT | 우선순위 큐(Priority Queue)?

우선순위 큐(Priority Queue)?큐에서 각 원소가 우선순위(priority)를 가지며, 높은 우선순위를 가진 원소가 먼저 처리되는 자료구조입니다. 일반 큐에서는 원소가 들어온 순서대로 처리되지만, 우선순위 큐에서는 우선순위가 높은 원소가 먼저 나옵니다.  우선순위 큐는 내부적으로 힙(Heap)구조를 사용하여 구현되는 경우가 많습니다. 이때 우선순위 큐는 최대 힙(Max Heap)또는 최소 힙(Min Heap)을 사용할 수 있습니다. 최대 힙: 가장 높은 우선순위를 가진 원소가 가장 먼저 나오도록 합니다. 최소 힙: 가장 낮은 우선순위를 가진 원소가 가장 먼저 나오도록 합니다.기본적인 우선순위 큐 사용(최소 힙)import java.util.PriorityQueue;public class Prio..

Coding Test 2025.01.07

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

CS | AOT 컴파일러란?

JIT 컴파일러를 공부하다보니, AOT 컴파일러 또한 공부를 해보려 합니다. AOT 컴파일러란?AOT(Ahead-Of-Time) 컴파일러는 프로그램 실행 전에,소스 코드나 중간 코드(바이트코드)를 미리 기계어로 컴파일하는 방식입니다.즉, 실행 전에 컴파일을 모두 완료하므로, 실행 시점에서는 번역 없이 바로 실행 가능한 상태가 됩니다.AOT 컴파일러의 동작 과정소스 코드 작성:개발자가 작성한 고급 언어 코드(C, C++, Java 등)를 작성합니다.AOT 컴파일:소스 코드를 특정 플랫폼의 기계어로 변환하여 실행 가능한 바이너리 파일을 생성합니다.예: .exe, .elf, .bin 같은 파일.실행:컴파일된 바이너리 파일은 직접 운영체제와 하드웨어에서 실행됩니다.AOT 컴파일러의 장단점장점:빠른 실행 속도:이..

Computer Science 2024.12.18

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

Spring Boot | Intellij Packages 인텔리제이 패키지 합쳐져 보이는 현상 해결하는 방법

이와같이 패키지에 파일이 아무것도 없을때, 불편한 적이 있는데 아래와 같이 있는 루트로 들어가게되면 Compact Middle Packages 항목의 체크표시를 풀어주면 됩니다!!   저는 이와같이 전체 분리되어있는게 보기 더 편하더라고요 :) 혹시나 저와같이 찾는 분이 있을까봐 정리한, 인텔리제이 사용법이였습니다 :)

Spring 2024.12.13

Spring Boot | 에러해결 - TypedResolveException: Could not resolve all dependencies for configuration ':compileClasspath'

과 같은 에러가 발생했다. 이 이유는 Spring Boot 파일을 처음 생성했을때, JAVA 21을 선택하였지만 해당 build.gradle 파일에서의 나의 설정은 17로 설정되었기 때문이다. 17 -> 21로 바꾼 후 빌드해주면 정상적으로 실행되는 것을 확인할 수 있다 :)    간단하게 해결할 수 있던 에러였지만, 앞으로 내 과거의 버그들을 하나하나씩 기록해가려한다! 어쩌면 첫 개발을 하는 사람들에게는 유용한 정보가 될 수 있고, 미래의 내가 과거의 나를 되돌아봤을때, 즐거운 추억이 될 수 있기 때문이다 :)

Spring 2024.12.13

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