이진 탐색과 요소 제거 알고리즘 실습

기초 개념 자료구조: 배열 알고리즘: 이진 탐색, 양방향 포인터(투포인터) 주요 오류 피하기 팁 변수의 활용을 최대한 활용하고, 목적에 맞게 명확하게 정의하세요. 조건 비교 연산자(==, !=)의 논리는 항상 명확히 처리하세요. 배열 인덱스 접근 시 범위를 초과하지 않도록 주의하세요. 특히 반복문의 종료 조건을 신중히 설정해야 합니다. 704. 이진 탐색 (Binary ...

9월 25일 00:48에 게시됨

알고리즘 문제 풀이: 제곱 정렬, 최소 부분 배열, 나선형 행렬

997. 정렬된 배열의 제곱 계산 입력된 비내림차순 정수 배열의 각 원소 제곱값을 오름차순으로 반환하는 문제입니다. 원소에는 음수가 포함될 수 있습니다. 무차별 대입 방식: 각 원소의 제곱을 계산한 후 Arrays.sort()로 정렬합니다. 양방향 포인터 방식: 제곱값이 가장 큰 값이 배열 양 끝에 위치한다는 특성을 활용합니다. 두 포인터를 배열 양 끝에 두고 비교하며 결 ...

8월 20일 05:50에 게시됨

자바에서 예외 처리와 실행 흐름 이해하기

프로그램이 예외를 처리하지 않으면 즉시 종료됩니다. 예외 처리는 예외 발생 시 대체 경로를 활성화하여 프로그램이 정상적으로 계속 작동하도록 보장하는 메커니즘입니다. 자바에서는 예외 처리를 위해 try, catch, finally 세 가지 블록을 사용합니다. 이 중 try와 catch는 반드시 함께 존재해야 하며, finally는 선택 사항이지만, 항상 실행되도록 설계되어 있습니다. ...

8월 1일 03:20에 게시됨

Java String 클래스 소스 코드 분석

Java String 클래스 소스 코드 분석 package java.lang; 코드 블록 1 public final class String implements Comparable<String>, CharSequence { // 1. 핵심 기본 배열: 문자열 각 문자 저장 private final char[] value; // 2. 해시값 캐시, 기본값 0 private int hash; // 기본 생성자: 빈 문자열 생성 public String() { ...

7월 31일 11:04에 게시됨

자바로 구현한 버블 정렬, 선택 정렬, 삽입 정렬

버블 정렬: 버블 정렬은 배열을 반복적으로 순회하며 두 개의 요소를 비교하고 필요에 따라 교환하는 과정을 통해 정렬을 수행합니다. 이 과정이 배열이 정렬될 때까지 계속됩니다. 특징: 비교적 안정적이며, 작은 크기의 배열에서 잘 작동합니다. package sorting.example; public class BubbleSortExample { private static boolean validateArray(int[] array) { ...

7월 31일 10:38에 게시됨

상태 패턴과 전략 패턴, 어떻게 구분하고 선택해야 할까?

서론: 비슷해 보이지만 본질이 다른 두 디자인 패턴 소프트웨어 설계에서 상태 패턴(State Pattern)과 전략 패턴(Strategy Pattern)은 종종 혼동된다. 두 패턴 모두 인터페이스를 기반으로 다형성을 활용하며, UML 클래스 다이어그램 상으로는 거의 동일한 구조를 가진다. 그러나 이 둘은 추구하는 목적과 적용되는 시나리오가 근본적으로 다르다. 어떤 패턴을 선택하느냐 ...

7월 25일 06:01에 게시됨

스프링부트 3.x와 엘라스틱서치 8.x 통합 가이드

엘라스틱서치 Docker 배포 컨테이너 구성 (docker-compose.yml) version: "3.1" # 서비스 구성 services: elasticsearch: container_name: elasticsearch-8.8.1 image: docker.elastic.co/elasticsearch/elasticsearch:8.8.1 # 컨테이너 root 권한 부여 (보안에 취약하므로 실제 운영 환경에서는 제거) privileged: true # Linux의 ulimit ...

7월 21일 09:39에 게시됨

스프링 클라우드 슬루스: 분산 추적 도구

스프링 클라우드 슬루스 소개 스프링 클라우드 슬루스는 스프링 클라우드용 분산 추적 도구입니다. 이 도구는 Dapper, Zipkin, HTrace의 개념을 차용하여 개발되었습니다. 빠른 시작 스프링 부트 애플리케이션의 클래스패스에 슬루스를 추가하면(메이븐과 그래들 예제는 "프로젝트에 슬루스 추가" 참조), 요청을 로깅하는 경우 상관 데이터가 로그에 수집되는 것을 볼 수 ...

7월 15일 01:52에 게시됨

자바 스레드 풀의 원리와 활용

스레드 풀이란? 스레드 풀은 일종의 작업 스레드 관리 컨테이너로 이해할 수 있다. 애플리케이션이 시작될 때 미리 여러 개의 스레드를 생성하여 풀 안에 보관하고, 작업이 필요할 때마다 새로 스레드를 만들지 않고 이 풀에서 꺼내 사용한다. 작업이 끝나면 스레드는 다시 풀로 반환되어 다음 작업을 기다린다. 기존 방식의 문제점 자바 1.5 이전에는 각각의 작업마다 ne ...

7월 6일 22:41에 게시됨

디자인 패턴 - 싱글톤 패턴 완벽 이해하기

생성 패턴의 핵심 목표는 객체 생성 과정과 사용을 분리하는 것입니다. 이를 통해 시스템의 결합도를 낮추고, 사용자는 객체가 어떻게 생성되는지 알 필요 없이 사용할 수 있습니다. 생성 패턴의 종류는 다음과 같습니다: 싱글톤 패턴 팩토리 메서드 패턴 추상 팩토리 패턴 프로토타입 패턴 빌더 패턴 싱글톤 패턴이란? 싱글톤 패턴은 클래스의 인스턴스가 오직 하나 ...

7월 5일 04:46에 게시됨