Java

· Java
Runnable 인터페이스 Runnable 인터페이스는 매우 단순합니다. 단 하나의 메서드, void run()을 정의하며, 이 메서드는 반환 값도, 예외도 없습니다. 이는 Runnable이 작업 실행의 단순함을 반영하며, 실행 결과나 오류를 직접 반환하지 않습니다. 결과적으로, Runnable 구현체는 별도의 로직(예: 공유 객체를 통한 결과 저장)을 통해 결과를 관리해야 할 수도 있습니다. Runnable은 직접적으로 스레드를 생성하고 실행할 때, 혹은 Executor Framework를 사용하여 스레드 풀에 작업을 제출할 때 사용됩니다. public class RunnableExample implements Runnable { @Override public void run() { // 실행하고자 하..
· Java
재귀 함수는 프로그래밍에서 복잡한 문제를 간단하게 해결하는 데 종종 사용됩니다. 하지만 모든 재귀가 동일한 것은 아니며, 특히 깊은 재귀 호출이 필요할 때는 그 차이를 이해하는 것이 중요합니다. 본문에서는 두 가지 주요 재귀 형태인 일반 재귀와 테일리 커전에 대해 살펴보고, 각각의 특징, 장단점을 비교해 보겠습니다. 일반 재귀 일반 재귀에서 함수는 자기 자신을 호출하며, 각 호출마다 현재의 함수 상태를 스택에 저장합니다. 이 방식은 직관적이고 이해하기 쉽지만, 깊은 재귀에서 스택 오버플로우를 일으킬 위험이 있습니다. 각 재귀 호출은 메모리를 소비하며, 호출이 깊어질수록 성능 저하가 발생할 수 있습니다. 테일리 커전 테일리 커전은 재귀 함수의 마지막에서 자신을 호출하는 특별한 형태입니다. 이 방식은 반환 ..
· Java
상황 현재 어떤 서비스는 여러 파드 기반에 하나의 파드 내에서 @Schedule 어노테이션을 통해서 하나의 스케줄러가 동작을 하고 있는 상황이다. 일정한 양의 데이터를 처리한다면 이슈가 없겠지만, 갑자기 데이터가 많아진다면 현재의 스케줄러가 부하가 있을 수 있는 상황이다. 어떻게 대처를 할 것인지? 해결방안 생각 각 파드마다 스케줄러를 돌리게 하는 동시에 데이터들을 각 파드에 나눠서 처리하게 하는 방식 환경변수를 이용해서 조건절을 사용하는 방식으로 분할해서 처리하는 방식을 생각할 수 있을거 같음 스케일 업 하는 방식 큐를 사용하는 방식 RabbitMq나 Kafka를 써서 순서대로 데이터 오는데로 Bulk 단위로 처리하는 방식 한 파드 내에서 스케줄러 처리에 대해서 한계가 있으므로 큐에 모이는 속도를 딜레..
· Java
서론 Java 8의 출시와 함께 소개된 스트림 API는 데이터 컬렉션 처리 방식에 혁신을 가져왔습니다. 이 포스팅에서는 스트림의 핵심 개념과 이를 통해 얻을 수 있는 주요 이점을 탐색해 보겠습니다. 자바 스트림이란? 스트림은 '데이터의 흐름'을 추상화한 Java 8의 기능입니다. 컬렉션 요소를 하나씩 참조해 처리할 수 있도록 해주며, 람다 표현식과 함께 사용되어 코드의 간결성과 가독성을 크게 향상시킵니다. 스트림의 주요 연산 1. 필터링(filter): 조건에 맞는 요소만 추출합니다. List names = Arrays.asList("Alice", "Bob", "Charlie"); List filteredNames = names.stream().filter(name -> name.startsWith("A..
· Java
서론 자바 개발자라면 누구나 한 번쯤은 `hashCode()`와 `equals()` 메소드에 대해 들어봤을 것입니다. 이 두 메소드는 객체의 동등성을 처리하는 데 중요한 역할을 하며, 특히 해시 기반의 컬렉션을 사용할 때 이들의 중요성은 더욱 부각됩니다. 이 글에서는 왜 이 두 메소드를 항상 함께 오버라이드해야 하는지에 대해 설명하겠습니다. 본론 1. **`equals()` 메소드의 역할** - `equals()` 메소드는 두 객체가 같은지를 결정합니다. - 자바의 `Object` 클래스에 있는 기본 `equals()` 메소드는 객체의 참조를 비교합니다. - 하지만, 대부분의 경우 객체의 내용이 같으면 같은 객체로 간주하는 것이 바람직합니다. - 따라서, 객체의 상태나 값이 같을 때 같은 객체로 인식되도..
· Java
'synchronize' 키워드가 함수에 적용될 때의 동작 방식은 다음과 같습니다: Mutual Exclusion (상호 배제): 'synchronize' 키워드가 적용된 함수나 블록은 한 시점에 하나의 스레드만 실행할 수 있습니다. 즉, 한 스레드가 'synchronized' 함수를 실행하고 있는 동안, 다른 스레드들은 해당 함수 또는 블록에 접근할 수 없습니다. Locks on Objects: Java에서 'synchronize' 키워드는 객체에 락을 걸게 됩니다. 메소드가 'synchronized'로 선언되면, 해당 메소드를 호출하는 객체는 락을 획득합니다. 이는 객체 레벨에서 동기화를 제공합니다. 만약 'synchronized' 블록이 사용된다면, 특정 객체에 대한 락을 지정할 수 있습니다. Me..
· Java
Java 8의 혁신 (2014년 출시) 람다 표현식: 코드를 간결하게 만들고, 함수형 프로그래밍 접근을 가능하게 함. 스트림 API: 데이터 컬렉션 처리를 위한 새로운 방법 제공. 인터페이스의 디폴트 메소드: 인터페이스에 구현 코드를 포함할 수 있게 함. 날짜와 시간 API: 사용자 친화적인 날짜 시간 처리 기능. 나즈혼 JavaScript 엔진: 자바스크립트 실행을 위한 새로운 엔진. Java 11의 변화 (2018년 출시) 장기 지원 (LTS): 기업 환경에 적합한 안정적인 버전 제공. 로컬 변수 타입 추론: var를 사용하여 지역 변수의 타입을 자동으로 결정. HTTP 클라이언트 API: HTTP/2 프로토콜을 완벽하게 지원. ZGC (Z Garbage Collector): 저 지연 시간을 위한 새..
· Java
# G1 GC 동작 원리: 핵심 요소를 통한 깊이있는 이해 자바 성능 튜닝을 위해 가장 중요한 요소 중 하나는 가비지 컬렉션(GC)이다. 그중에서도 본 포스팅에서는 최신 버전의 JDK에서 기본으로 설정되는 G1(Garbage-First) GC에 대해 깊이 있게 알아볼 것이다. 1. G1 GC란? G1 GC는 '가비지 먼저'라는 이름에서 알 수 있듯이, 메모리에서 가비지가 가장 많이 발생한 영역부터 청소를 시작하는 가비지 컬렉터이다. 이전의 CMS(Concurrent Mark Sweep) GC와 달리, G1 GC는 메모리를 작은 영역들로 나누고, 가비지가 많이 쌓인 영역부터 우선적으로 청소한다. 2. G1 GC의 동작 방식 G1 GC의 동작은 크게 네 가지 단계로 이루어진다. **초기 표시(Initial ..
· Java
자바에서 메모리 관리는 핵심적인 요소 중 하나입니다. 이를 자동화한 메커니즘이 바로 '가비지 컬렉션(GC)'입니다. GC는 더 이상 사용하지 않는 메모리를 자동으로 회수하는 역할을 하며, 이는 개발자가 직접 메모리를 관리하지 않아도 되게 하여 코드의 복잡성을 줄이고 버그를 줄여줍니다. 그렇다면 자바의 GC는 어떻게 동작할까요? 이 포스트에서는 GC의 동작 과정을 이해하기 쉽게 설명하겠습니다. GC의 필요성 객체 지향 프로그래밍에서는 수많은 객체가 생성되고 소멸됩니다. 이런 객체들은 힙(heap)이라는 공간에 저장되는데, 만약 이 공간이 꽉 차면 새로운 객체를 생성할 수 없게 됩니다. 개발자가 직접 메모리를 관리하는 C/C++에서는 메모리 누수(memory leak)와 같은 문제가 발생할 수 있습니다. 반..
· Java
오늘은 매우 중요한 디자인 패턴 중 하나인 '싱글톤 패턴'에 대해 설명하려고 합니다. 소프트웨어 설계에 있어 싱글톤 패턴은 큰 역할을 하는데, 이에 대해 잘 이해하는 것이 중요하다고 생각합니다. 그렇다면, 싱글톤 패턴이란 무엇일까요? 싱글톤 패턴은 주어진 클래스의 인스턴스를 오직 하나만 생성하는 것을 보장하는 소프트웨어 디자인 패턴입니다. 다시 말해서, 클래스에 대해 단 하나의 인스턴스만 존재하도록 합니다. 이 패턴은 주로 공유 리소스에 대한 액세스를 제어하는 경우에 사용됩니다. 예를 들어, 로그 파일 작성기, 데이터베이스 연결 등이 이에 해당될 수 있습니다. 이런 경우에는, 여러 인스턴스가 동시에 리소스를 접근하면 문제가 발생할 수 있기 때문에 싱글톤 패턴을 사용합니다. 자바에서 싱글톤 패턴을 구현하는..
개발만파볼까
'Java' 카테고리의 글 목록