JAVA 30

유니코드, UTF-8, 직렬화

1. 유니코드 (Unicode):유니코드는 전 세계의 문자에 대해 고유한 숫자 코드(코드 포인트)를 할당하는 문자 집합입니다.예를 들어, 한글 "가"는 U+AC00이라는 코드 포인트를 가지고 있습니다.유니코드는 문자와 코드 포인트를 1:1로 매핑한 코드표입니다. 즉, 유니코드는 "문자"를 숫자로 표현하는 시스템입니다.public class UnicodeExample { public static void main(String[] args) throws Exception { String text = "가"; // "가"의 유니코드 값 확인 int unicodeValue = text.codePointAt(0); System.out.print..

JAVA 2024.11.18

[JAVA] String intern()

String의 intern() 메서드에 대해 공부하다 보면 "절대 쓰지 말라"는 권고를 접할 수 있습니다.intern()은 힙 영역에 생성된 String 객체를 String Constant Pool로 옮겨 메모리를 절약하고 중복을 줄이기 위한 메서드지만, 잘못 사용하면 성능 문제가 발생할 수 있습니다. String Constant Pool 은 자바 7 이후에  메서드 영역에서 힙 영역으로 옮겨졌습니다. 즉 GC 의 대상이 된다는 것입니다.  intern() 메서드를 사용할 때 발생할 수 있는 문제점 Full GC 발생 가능성 증가로 인한 성능 저하객체는 처음 생성 시 에덴 영역에 할당되고, 참조되지 않으면 Minor GC에서 쉽게 수거됩니다. 하지만 intern()으로 객체를 String Constant..

JAVA 2024.11.15

[JAVA] 스레드 Join

스레드는 생성하고 시작하고, 종료되는 생명주기를 가진다. 스레드의 상태New (새로운 상태) : 스레드가 생성되었으나 아직 시작되지 않은 상태Runnable (실행 가능 상태) : 스레드가 실행 중이거나 실행될 준비가 된 상태Blocked (차단 상태) : 스레드가 동기화 락을 기다리는 상태Waiting (대기 상태) : 스레드가 무한으로 다른 스레드의 작업을 기다리는 상태Time Waiting (시간제한 대기 상태): 스레드가 일정 시간 동안 다른 스레드의 작업을 기다리는 상태Terminated (종료 상태) : 스레드의 실행이 완료된 상태.자바 스레드(Thread) 의 생명주기는 여러 상태(state)로 나뉘며, 각 상태는 스레드가 실행되고 종료되기까지의 과정을 나타낸다. 자바 스레드의 생명주기를 자..

JAVA 2024.11.12

[JAVA] Runnable 을 만드는 다양한 방법

Runnable을 만드는 다양한 방법 중첩 클래스를 사용하면 Runnable을 더 편리하게 만들 수 있다. 참고로 모두 결과는 같아. 정적 충첩 클래스 사용package thread.start;import static util.MyLogger.log;public class InnerRunnableMainV1 { // 특정 클래스만에서만 사용되는 경우 정적 중첩 클래스 사용 public static void main(String[] args) { log("main() start"); MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.sta..

JAVA 2024.11.11

[JAVA] 데몬 스레드

스레드는 사용자(user) 스레드와 데몬(daemon) 스레드 2가지 종류로 구분할 수있다.  사용자 스레드 (non-deamon 스레드)프로그램의 주요 작업을 수행한다.작업이 완료 될 때 까지 실행된다.모든 user 스레드가 종류되면 JVM 도 종료된다.  데몬 스레드 백그라운에서 보조적인 작업을 수행한다.모든 user 스레드가 종류되면  데몬 스레드는 자동으로 종료된다. jvm 은 데몬 스레드의 실행 완료를 기다리지 않고 종료된다. 데몬 스레드가 아닌 모든 스레드가 종류되면, 자바 프로그램도 종료된다. 용어 - 데몬 : 그리스 신화에서 데몬은 신과 인간 사이의 중간적 존재로 , 보이지 않게 활동하며 일상적인 일들을 도왔다. 이런 의미로 컴퓨터 과학에서는 사용자에게 직접적으로 보이지않으면서 시스템의 백..

JAVA 2024.11.11

[JAVA] 스레드란? run() start() 의 차이

스레드란 무엇이면 왜 스레드 실행 시 run() 메서드가 아닌 start()를 호출하라고 하는 걸까?해당 내용을 알아보자. 자바 메모리 구조자바 메모리 영역은 크게 메서드, 스택, 힙 영역으로 나눠져 있다. 메서드 영역(Method Area) :  메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 프로그램의 모든 영역에서 공유한다.클래스 정보 : 클래스의 실행 코드 (바이트 코드). 필드, 메서드와 생성자 코드 등 모든 실행 코드가 존재한다.static 영역 : static 변수들을 보관한다.런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다.스택 영역 (Stack Area) : 자바 실행 시, 하나의 실행 스택이 생성된다. 각 스택 프레임..

JAVA 2024.11.11

[JAVA] String + 연산과 비효율성 StringBuilder의 해결 원리

String에 + 연산은 상수풀에 메모리가 할당되어 중간연산 과정에서 많은 객체를 생성한다. StringBuilider를 사용하면 중간과정의 비효율을 해결할 수 있다는데 어떠한 원리로 해결하였을까?궁금증이 생겨 해당 내용을 포스팅하게 되었다.   String에서 + 연산과 그 비효율성 String 객체에서 + 연산을 사용할 때마다 새로운 객체가 생성된다. 이는 불변 (immutable) 특성 때문에 발생하는데 , String 객체는 한번 생성되면 그 값을 변경할 수 없다.따라서 + 연산을 통해 여러 문자열을 이어 붙일 때, 중간 과정에서 새로운 String 객체들이 계속 생성되고,  이 객체들은 상수 풀에 할당되어 메모리를 추가로 차지한게 된다.  이로 인해 불필요한 객체가 계속해서 생성되고 메모리 사용..

JAVA 2024.11.10