본문 바로가기
728x90

java14

[Java] ☕ Executor 프레임 워크 [Java] ☕ Executor 프레임 워크Executor 프레임워크는 Java에서 스레드를 생성하고 관리하는 표준화된 방법을 제공한다.전통적으로 우리는 new Thread()를 사용해 스레드를 하나하나 직접 만들었을 때 잘못사용하게 되면 다음과 같은 문제점들이 있었다.리소스 낭비 (새 스레드를 만들 때마다 메모리/CPU 소모)스레드 수 관리 실패 (수천 개 스레드가 생성되어 시스템 다운)코드 복잡도 증가 (어디서 누가 스레드를 돌리고 있는지 추적하기 힘듦)직접 만든 스레드는 작업이 끝나도 계속 살아있거나 제대로 종료되지 않아서 리소스를 점유한다.직접 만든 스레드에서는 예외를 잡기 어렵고, 작업 결과를 받아오기 힘듦 Executor 프레임워크는 이 모든 문제를 해결하기 위해 등장했다. Executor는 .. 2025. 4. 27.
[Java] 🚦 자바 메모리 가시성(Java Memory Visibility) [Java] 🚦 자바 메모리 가시성(Java Memory Visibility) Java와 같은 멀티스레드 환경에서 각 스레드는 성능 향상을 위해 메인 메모리(Heap)에 있는 변수의 복사본을 자신의 캐시(CPU 캐시 등)에 저장하여 사용합니다. 스레드가 변수 값을 변경하면, 이 변경 내용은 즉시 메인 메모리에 반영되지 않고 자신의 캐시에만 반영될 수 있습니다. 이때 다른 스레드가 해당 변수 값을 읽으려 하면, 메인 메모리에 아직 반영되지 않은 오래된 캐시 값을 읽거나 전혀 다른 값을 읽을 수 있습니다. 이처럼 한 스레드의 변수 변경 결과를 다른 스레드가 즉시(또는 적절한 시점에) 볼 수 없는 현상을 메모리 가시성 문제라고 합니다. Spring 애플리케이션에서 여러 웹 요청이 같은 서비스 빈의 상태를 .. 2025. 4. 20.
불필요한 객체 생성을 막는 방법: PRIVATE 생성자 활용하기 불필요한 객체 생성을 막는 방법: PRIVATE 생성자 활용하기 자바에서는 클래스의 인스턴스화를 막기 위해 `private` 생성자를 사용할 수 있습니다. 이렇게 함으로써 해당 클래스의 인스턴스를 직접 생성하지 못하도록 제한할 수 있습니다. 이러한 기법은 주로 유틸리티 클래스나 상수 클래스와 같이 인스턴스화할 필요가 없는 클래스에서 사용됩니다. 인스턴스화를 막으면 다음과 같은 이점을 얻을 수 있습니다. 불필요한 객체 생성 방지 클래스가 인스턴스화되지 않으면 해당 클래스의 객체를 생성할 필요가 없어집니다. 이는 자원 낭비를 방지하고 성능을 향상시킵니다. 상속을 방지 클래스를 final로 선언하지 않아도 인스턴스화를 막음으로써 상속을 통한 오버라이딩을 방지할 수 있습니다. 코드의 명확성 생성자를 privat.. 2024. 1. 27.
[Java] (2) 시간, 날짜 관련 API(LocalTime, LocalDate, LocalDateTime) (2) 시간, 날짜 관련 API(LocalTime, LocalDate, LocalDateTime) 1. 시간, 날짜 관련 클래스 1-1. LocalTime 시간 정보만을 나타내는 클래스로 시(hour), 분(minute), 초(second), 나노초(nanoOfSecond)를 포함하며 시간 오프셋(TImeZone)에 대한 정보는 없습니다. 시간 관련 클래스 시간 오프셋(TimeZone)에 대한 정보는 없다. 시(hour), 분(minute), 초(second), 나노초(nanoOfSecond)의 값을 갖는다 ex) 19:35:25.830054400 1-2. LocalDate 날짜 정보만을 나타내는 클래스로 연(year), 달(month), 날(dayOfMonth)의 포함하며, 특정 시간대나 시간 오프셋(.. 2023. 8. 20.
728x90