Java 20

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

Java | 'a'란 무엇인가?

Java를 배우다 보면 문자 리터럴('a')과 문자열 리터럴("a")의 차이점을 궁금해할 수 있습니다. 이번 글에서는 'a'의 의미와 특징, 활용 방법에 대해 알아보겠습니다.1. 'a'의 정의Java에서 'a'는 문자 리터럴을 의미하며, 하나의 문자만을 표현하는 char 타입으로 처리됩니다. 문자 리터럴은 항상 작은따옴표(')로 감싸야 합니다.2. 'a'의 주요 특징유니코드 값모든 문자는 유니코드 값을 가지고 있으며, 'a'의 유니코드 값은 97입니다.예를 들어:'a': 97'b': 98'z': 122char 타입'a'는 char 타입입니다. 이는 단 하나의 문자를 표현합니다.문자열과는 다릅니다. 문자열은 String 타입이며, "a"는 하나의 문자로 구성된 문자열입니다.숫자처럼 연산 가능char 타입은..

Java 2024.12.09

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

Java | 정적 팩토리 메서드(Static Factory Method)

정적 팩토리 메서드(Static Factory Method) 클래스의 인스턴스를 생성하고 반환하는 정적 메서드 입니다. 주로 생성자 대신 사용되며, 객체 생성 로직을 숨기고 객체 생성을 유연하게 다룰 수 있게 합니다. 이러한 정적 팩토리 메서드는 해당 클래스의 이름을 갖지 않아도 되며, 호출할 때마다 새로운 객체를 생성할 필요가 없을 때 특히 유용합니다. 메서드 생성 public class MyClass { // 생성자 대신 사용되는 정적 팩터리 메서드 public static MyClass createInstance() { // 객체 생성 로직 return new MyClass(); } } 위의 생성된 메서드를 활용하여 객체 생성 MyClass instance = MyClass.createInstanc..

Java 2024.03.04

Java | Document Class / Element Class / Jsoup 크롤링 예제 코드

Document 및 Element 클래스는, XML 문서를 다루기 위한 DOM(Document Object Model) API에 속하는 클래스입니다. 1. Document 클래스 Document 클래스는 XML 문서의 전체 구조를 나타냅니다. Document 객체는 XML 문서의 루트 엘리먼트에 대한 진입점이며, 해당 문서의 전체 트리 구조를 포함합니다. 2. Element 클래스 Element 클래스는 XML 문서에서 특정 엘리먼트를 나타냅니다. Element 객체는 XML 문서의 특절 엘리먼트에 대한 정보를 포함하며, 이 엘리먼트의 하위 엘리먼트, 속성 등을 다룰 수 있습니다. 보통 XML 문서를 파싱할 때, XML 문서의 구조를 Document로 읽어오고, 그 다음에 원하는 정보 추출을 위하여, E..

Java 2024.02.29