~/tech-blog/tag/Java — zsh
지금 --명이 보고 있습니다오늘 --누적 --

#Java 50 posts

카테고리를 가로질러 Java를 다룬 글을 모았습니다.

JAVA · JVM

SimpleDateFormat 동시성 문제부터 불변 객체까지

서비스의 날짜 변환 유틸에서 간헐적으로 발생한 ArrayIndexOutOfBoundsException을 추적하며 찾은 SimpleDateFormat 동시성 문제의 원인과 같은 유형의 사례, 불변 객체를 정리합니다.

2026.10.23 · 95f97e5 · Java · JVM — 22 min
JAVA · JVM

데드락의 네 가지 조건과 해결 전략

데드락이 생기는 네 가지 조건과 운영체제의 예방·회피·감지·무시 전략을 정리하고, InnoDB·JVM·tryLock·락 순서 정렬 같은 실제 도구가 각각 어느 전략에 해당하는지 예제 흐름도로 연결합니다.

2026.10.05 · def9f5b · Java · JVM — 8 min
JAVA · JVM

스핀락, 뮤텍스, 세마포

한 프로그램 안의 여러 스레드가 같은 데이터를 건드릴 때 쓰는 스핀락·뮤텍스·세마포를 기다리는 방식과 소유권 차이로 비교하고, 순서 신호와 우선순위 역전까지 예제 흐름도로 정리합니다.

2026.10.04 · f31faa2 · Java · JVM — 7 min
JAVA · JVM

Garbage Collection(GC)

JVM 메모리 구조와 Mark·Sweep·Compaction, 세대별 GC의 동작 원리를 정리하고, Serial GC부터 G1 GC, ZGC까지 주요 GC 알고리즘의 단계와 Stop-The-World 구간을 흐름도로 비교합니다.

2024.09.13 · 20eb3a0 · Java · JVM — 19 min
JAVA · JVM

Garbage Collection 튜닝

jstat으로 GC 상태를 모니터링하는 방법과 Young·Old·Metaspace 영역별 증상에 따른 GC 튜닝 기준을 힙 구조, 튜닝 흐름 그림과 함께 정리합니다.

2024.09.13 · 20eb3a0 · Java · JVM — 9 min
JAVA · JVM

공급자 Supplier<T>

Java의 함수형 인터페이스 Supplier의 정의와 사용법을 예제로 정리하고, 값이 필요한 순간까지 호출을 미루는 지연 초기화에 활용하는 방법을 정리합니다.

2023.11.05 · 20eb3a0 · Java · JVM — 6 min
객체지향 · 설계

이펙티브 자바 2장: 객체 생성과 파괴

이펙티브 자바 2장 중 생성자 대신 정적 팩터리 메서드를 쓰는 장단점과 명명 방식, 매개변수가 많을 때 점층적 생성자 대신 빌더 패턴과 계층적 빌더를 쓰는 방법을 예제와 흐름도로 정리합니다.

2023.11.04 · 1354ac5 · 객체지향 · 설계 — 10 min
클린 코드 WITH JAVA · 1/16

레거시 코드 리팩터링 — 1단계

레거시 QnaService의 질문 삭제 로직에서 단위 테스트 가능한 비즈니스 로직을 도메인 모델로 옮기는 리팩터링 미션의 요구사항과 리뷰 피드백을 정리합니다.

2023.06.18 · 50a770f · 클린 코드 with Java — 3 min
클린 코드 WITH JAVA · 2/16

스트림, 람다, Optional — 1단계

익명 클래스를 람다로 바꾸고, 람다로 합계 로직의 중복을 없애고, 스트림의 map, filter, reduce와 Optional로 조건 반환·기본값·예외 처리를 구현한 미션 기록입니다.

f31faa2 · 클린 코드 with Java — 9 min
클린 코드 WITH JAVA · 3/16

Set 컬렉션으로 배우는 학습 테스트 — 1단계

Set 컬렉션의 size()와 contains()를 학습 테스트로 확인하고, JUnit5의 @ValueSource·@CsvSource로 중복 코드를 제거한 뒤 받은 리뷰 피드백까지 정리한 미션 기록입니다.

50a770f · 클린 코드 with Java — 5 min
클린 코드 WITH JAVA · 4/16

문자열 계산기 — 1단계

들여쓰기 depth와 메서드 크기 제한, else 금지 조건 아래 문자열 사칙연산 계산기를 구현하고, 리뷰 피드백에 따라 if-else 분기를 연산자 enum으로 바꾼 과정을 정리합니다.

2023.04.25 · 50a770f · 클린 코드 with Java — 4 min
클린 코드 WITH JAVA · 5/16

문자열 덧셈 계산기로 배우는 TDD — 2단계

문자열 덧셈 계산기를 TDD로 구현하고, 리뷰 피드백에 따라 상수화, 멤버 변수의 지역 변수 전환, 들여쓰기를 줄이는 메서드 분리, 테스트 개선을 적용한 기록입니다.

50a770f · 클린 코드 with Java — 11 min
클린 코드 WITH JAVA · 6/16

로또 자동 — 2단계

로또 자동 구매 기능을 TDD로 구현하고, 리뷰를 반영해 당첨 상수를 enum 안으로 옮기고 전략 인터페이스 이름을 구체적으로 바꾼 기록입니다.

50a770f · 클린 코드 with Java — 8 min
클린 코드 WITH JAVA · 7/16

로또 게임 2등 — 3단계

보너스 볼로 2등을 판정하는 로또 3단계를 enum과 일급 컬렉션으로 구현하고, 리뷰를 반영해 enum 상수 정리, 서비스 객체 싱글톤, 스트림 리팩터링을 적용한 기록입니다.

f31faa2 · 클린 코드 with Java — 6 min
클린 코드 WITH JAVA · 8/16

로또 수동 — 4단계

로또 수동 구매 기능을 값 객체와 일급 컬렉션으로 구현하고, 리뷰를 반영해 view 쪽 입력 객체, 수동·자동 로또를 합치는 메소드, 스트림으로 구조를 바꾼 기록입니다.

50a770f · 클린 코드 with Java — 7 min
클린 코드 WITH JAVA · 9/16

사다리 생성 — 2단계

사다리 미션 2단계에서 참여자 이름과 함께 사다리를 출력하는 기능을 구현하고, 생성자 책임 분리, Object 대신 제네릭과 Supplier 활용, 오버엔지니어링 기준에 대한 리뷰 피드백을 정리합니다.

50a770f · 클린 코드 with Java — 9 min
클린 코드 WITH JAVA · 10/16

사다리 게임 실행 — 3단계

사다리 미션 3단계에서 실행 결과를 출력하는 기능을 구현하고, Utils 이름과 논리적 의존성, 명령과 조회 분리, enum 패키지 위치, 메서드 응집도에 대한 리뷰 피드백을 정리합니다.

50a770f · 클린 코드 with Java — 7 min
클린 코드 WITH JAVA · 11/16

사다리 리팩터링 — 4단계

사다리 미션 4단계에서 코드를 리팩터링하며 받은 방어적 복사, 메서드 이름과 역할, 내부에서만 쓰는 enum, 전략 인터페이스 주입에 대한 리뷰 피드백을 정리합니다.

50a770f · 클린 코드 with Java — 6 min
클린 코드 WITH JAVA · 12/16

자동차 경주 — 3단계

자동차 경주 게임을 처음 구현하며 받은 View 책임 분리, 축약어 지양, 경계값 테스트, 생성자에서 자동차 생성, 유틸리티 클래스의 private 생성자에 대한 리뷰 피드백을 정리합니다.

50a770f · 클린 코드 with Java — 14 min
클린 코드 WITH JAVA · 13/16

자동차 경주 우승자 — 4단계

자동차 이름과 우승자 판별 기능을 추가하며 받은 클래스 변수 작성 순서, 원시값 포장, String.format, stream 활용에 대한 리뷰 피드백과 일급 컬렉션으로 정리한 코드를 기록합니다.

50a770f · 클린 코드 with Java — 13 min
클린 코드 WITH JAVA · 14/16

자동차 경주 리팩터링 — 5단계

자동차 경주 코드를 MVC 패턴으로 리팩터링하며 받은 사용자 정의 예외, 실패하는 테스트, 정적 팩토리 메서드, 전략 패턴에 대한 리뷰 피드백을 정리합니다.

50a770f · 클린 코드 with Java — 7 min
클린 코드 WITH JAVA · 15/16

수강신청 도메인 모델 — 2단계

넥스트스텝 수강신청 미션 2단계에서 DB 테이블 설계 없이 강의(Session)의 도메인 모델부터 TDD로 구현하며 받은 수강 인원 검증 위치, enum에 메시지 보내기 리뷰 피드백을 정리합니다.

2023.06.18 · 50a770f · 클린 코드 with Java — 3 min
클린 코드 WITH JAVA · 16/16

수강신청 DB 적용 — 3단계

수강신청 미션 3단계에서 2단계의 도메인 구조를 유지하며 DB 테이블과 매핑하고, 도메인 의도가 드러나는 메서드 이름과 SessionUserMapping 목록에 대한 리뷰 피드백을 정리합니다.

2023.07.18 · 50a770f · 클린 코드 with Java — 3 min
JAVA · JVM

Stream을 활용한 예제 모음

for문 대신 자바 Stream으로 리스트·맵 변환, enum 값 찾기, 합계, 중복 체크, null 처리, 문자열 합치기, reduce를 작성한 예제를 정리합니다.

2023.05.19 · 20eb3a0 · Java · JVM — 5 min
객체지향 · 설계

익명 클래스

자바의 익명 클래스가 무엇인지 정리하고, 조건만 다른 합계 함수의 중복을 조건 전달로 줄이는 예제, 인터페이스를 이름 없이 구현하는 방법과 람다와의 관계, 사용할 때의 이점을 흐름도와 함께 정리합니다.

2023.05.16 · 1354ac5 · 객체지향 · 설계 — 5 min
객체지향 · 설계

일급컬렉션

Collection을 감싸고 그 외의 멤버 변수를 두지 않는 일급 컬렉션의 정의와 장점 일곱 가지를, 로또 번호를 정렬해 보관하는 LottoNumbers 예제 코드와 함께 정리합니다.

2023.04.22 · 1354ac5 · 객체지향 · 설계 — 3 min
객체지향 · 설계

원시값 포장

자동차 이름을 String 대신 Name 객체로 감싸는 예제로, 원시 타입 변수를 포장하면 유효성 검증 책임이 값 객체 안으로 옮겨져 Car의 역할이 분명해지는 이유를 정리합니다.

2023.04.22 · 1354ac5 · 객체지향 · 설계 — 2 min
객체지향 · 설계

정적 팩토리 메소드 패턴

Track에서 Cars를 만들던 반복문을 Cars.from()으로 옮기는 예제로 정적 팩토리 메서드가 객체 생성 로직을 감추는 방식을 살펴보고, from·of·getInstance 등 네이밍 컨벤션을 정리합니다.

2023.04.22 · 1354ac5 · 객체지향 · 설계 — 3 min
SPRING

Bean Validation으로 요청 값 검증하기

Bean Validation의 @NotNull, @NotBlank, @Min, @Size, @Pattern 같은 검증 어노테이션 종류와, @Valid로 요청 값을 검증하는 흐름과 사용 예시를 정리합니다.

2023.03.22 · b63427e · Spring — 4 min
SPRING

@JsonIgnoreProperties(ignoreUnknown=true)

Jackson의 @JsonIgnoreProperties로 특정 프로퍼티를 직렬화·역직렬화에서 제외하는 방법과, ignoreUnknown=true로 클래스에 없는 JSON 프로퍼티를 무시해 역직렬화 오류를 막는 방법을 정리합니다.

2023.03.19 · b63427e · Spring — 4 min
JAVA · JVM

Collectors.toMap에서 만난 Duplicate Key 예외

Collectors.toMap()으로 Map을 만들 때 키가 중복되면 발생하는 IllegalStateException(Duplicate Key)과, 세 번째 인자인 Merge Function으로 값을 병합해 해결하는 방법을 정리합니다.

2023.03.14 · 20eb3a0 · Java · JVM — 3 min
JAVA · JVM

NPE를 막는 자바 방어 코드 모음

NPE를 막기 위해 사용했던 컬렉션 null 체크(CollectionUtils.emptyIfNull, Optional.ofNullable, isEmpty)와 Lists.partition, Function.identity()로 Map 만들기를 예제와 흐름도로 정리합니다.

2022.11.01 · 20eb3a0 · Java · JVM — 4 min
JAVA · JVM

이미지 다운로드에서 터진 NPE와 방어 코드

프록시 서버를 거쳐 이미지를 받아 오는 코드에서 getBody() null 체크와 RuntimeException catch가 빠져 발생한 NPE의 원인과, 방어 코드·catch 추가로 해결한 과정을 정리합니다.

2022.10.20 · 20eb3a0 · Java · JVM — 3 min
스프링 부트와 JPA 활용 · 1/4

스프링 부트와 JPA로 만드는 API 기본

회원 등록·수정·조회 API를 예제로, 엔티티를 요청·응답에 그대로 쓰지 않고 별도의 DTO로 API 스펙과 엔티티를 분리하는 방법과 수정 API에서 커맨드와 쿼리를 나누는 방법을 정리합니다.

2022.04.26 · f31faa2 · Spring JPA — 7 min
JAVA · JVM

Java 21의 Virtual Thread: 운영체제 개념과 효율성, 장단점 정리

Java 21에서 정식 도입된 Virtual Thread가 Carrier Thread에 mount·unmount되는 방식을 운영체제의 멀티프로그래밍·멀티태스킹·멀티스레딩 개념과 연결해 흐름도로 설명하고, pinning을 포함한 장단점과 사용 시기를 정리합니다.

20eb3a0 · Java · JVM — 12 min
JAVA · JVM

Java 기준 멀티스레드와 레이스 컨디션

Java에서 멀티스레드로 공유 변수를 증가시킬 때 레이스 컨디션이 생기는 과정을 스레드 실행 순서 흐름도로 살펴보고, synchronized·ReentrantLock·AtomicInteger로 해결하는 방법과 volatile의 한계를 정리합니다.

20eb3a0 · Java · JVM — 8 min
알고리즘

완전 탐색 문제 풀이

프로그래머스 완전 탐색 문제 중 모의고사 문제를 풀이하며 접근 방법을 정리합니다.

af4ee5d · 알고리즘 — 3 min
알고리즘

프로그래머스 — 해시

HashMap을 활용한 프로그래머스 문제 완주하지 못한 선수, 전화번호 목록, 위장을 자바로 풀이합니다.

af4ee5d · 알고리즘 — 6 min
알고리즘

프로그래머스 — 정렬

정렬을 활용한 프로그래머스 문제 K번째 수와 가장 큰 수를 자바로 풀이하고 compareTo 동작 원리를 정리합니다.

af4ee5d · 알고리즘 — 6 min
알고리즘

문자열 다루기

문자 카운트, 대소문자 변환, 팰린드롬 판별, 문자열 압축 등 문자열 처리 문제 12개를 자바로 풀이합니다.

f31faa2 · 알고리즘 — 21 min
알고리즘

투 포인터와 슬라이딩 윈도우

투 포인터와 슬라이딩 윈도우 기법으로 배열 병합, 최대 매출, 연속 부분수열 등 문제 6개를 자바로 풀이합니다.

f31faa2 · 알고리즘 — 13 min
알고리즘

스택과 큐

스택과 큐를 이용해 괄호 검증, 후위 연산, 카카오 인형뽑기 등 코딩 테스트 문제 8개를 자바로 풀이합니다.

f31faa2 · 알고리즘 — 20 min
알고리즘

정렬과 이분 탐색

선택·버블·삽입 정렬, LRU 캐시, 이분 탐색 기반 결정 알고리즘까지 코딩 테스트 문제 5개를 자바로 풀이합니다.

f31faa2 · 알고리즘 — 11 min
알고리즘

해시맵과 트리셋

HashMap과 TreeSet을 활용해 투표 집계, 아나그램 판별, 슬라이딩 윈도우 매출 분석 등 문제 5개를 자바로 풀이합니다.

f31faa2 · 알고리즘 — 11 min
알고리즘

BFS와 DFS

BFS와 DFS를 이용해 최단 경로, 부분집합, 배낭형 문제 등 코딩 테스트 문제 6개를 자바로 풀이합니다.

f31faa2 · 알고리즘 — 11 min
알고리즘

배열 — 1차원과 2차원

1차원·2차원 배열을 활용해 정렬, 소수 판별, 격자 탐색 등 코딩 테스트 기본 문제 8개를 자바로 풀이합니다.

af4ee5d · 알고리즘 — 14 min
스프링 MVC · 2/4

서블릿

스프링 부트 내장 톰캣 환경에서 서블릿을 등록하고, HttpServletRequest로 쿼리 파라미터·HTML Form·메시지 바디 데이터를 조회하는 방법과 HttpServletResponse로 텍스트·HTML·JSON을 응답하는 방법을 정리합니다.

51441c4 · Spring — 24 min
스프링 MVC · 3/4

서블릿, JSP, MVC 패턴

회원 관리 웹 애플리케이션을 서블릿, JSP, MVC 패턴 순서로 만들어 보며 각 방식의 한계와 MVC 패턴이 등장한 이유, 그리고 MVC 컨트롤러에 남는 중복과 공통 처리 문제를 정리합니다.

51441c4 · Spring — 27 min
스프링 MVC · 4/4

MVC 프레임워크 만들기

프론트 컨트롤러 패턴을 v1부터 v5까지 단계적으로 발전시키며 뷰 분리, 서블릿 종속성 제거, 뷰 리졸버, 핸들러 어댑터가 스프링 MVC의 핵심 구조로 이어지는 과정을 정리합니다.

51441c4 · Spring — 38 min
스프링 입문 · 12/12

AOP가 필요한 상황, 사용법

회원 서비스의 메서드마다 넣은 실행 시간 측정 코드를 예로 들어 핵심 관심사항과 공통 관심사항을 나누는 AOP의 필요성과, @Aspect와 @Around로 시간 측정 AOP를 작성하는 방법을 정리합니다.

51441c4 · Spring — 5 min
● main 231 posts UTF-8 LF © 2026 코징 RSS · GitHub