Immutable 3

Java 불변 객체와 방어적 복사: record로 안전한 도메인 만들기

Java 17 기준으로 불변 객체가 왜 중요한지, 방어적 복사로 캡슐화를 지키는 방법, record 활용과 얕은/깊은 복사 차이를 실무 관점에서 정리합니다.도입 (문제 상황)컬렉션이나 날짜 같은 값을 “그냥 getter로 꺼내줬는데”, 어느 순간부터 데이터가 몰래 바뀌어 버린 경험이 있으실 거예요. 특히 멀티스레드 환경이나 캐시, 이벤트 기반 처리에서는 이런 변경이 재현도 어렵고 원인 파악도 더 어렵습니다. 이럴 때 가장 강력한 방어막이 **불변 객체(Immutable Object)**와 **방어적 복사(Defensive Copy)**입니다.핵심 개념: Java 불변 객체가 중요한 이유 + 방어적 복사불변(Immutable)이 주는 실무적 이점불변 객체는 “한 번 만들어지면 상태가 바뀌지 않는 객체”입니..

JAVA 2026.02.26

Java Collections 유틸 활용 팁 — 정렬부터 불변 컬렉션까지 한 번에 정리

Java 17 기준으로 Collections 정렬 유틸과 불변 컬렉션(List.of/Map.of), unmodifiable vs copyOf 차이를 실무 관점에서 정리합니다. 리스트를 정렬했는데 “원본이 바뀌어 버려서” 다른 로직이 깨진 경험이 있으신가요? 또는 List.of()로 만든 리스트에 add()를 했다가 런타임 예외를 만나 당황하신 적도 있을 거예요. 컬렉션은 자주 쓰는 만큼, “의도한 변경 가능성(mutability)”을 코드로 정확히 표현하는 게 생각보다 중요합니다.핵심 개념 (Java Collections 유틸과 불변 컬렉션이 중요한 이유)Java에서 컬렉션을 다룰 때 실무 사고의 대부분은 두 가지에서 나옵니다.정렬은 “어디를” 바꾸는가?Collections.sort(list)나 list..

JAVA 2026.02.19

Java 접근 제어자와 캡슐화 — public/private/protected/default 제대로 쓰기

Java 접근 제어자 범위와 캡슐화의 목적을 실무 관점에서 정리하고, getter/setter 남용을 피하는 방법과 불변 객체 기본 패턴을 예제로 설명합니다. 클래스를 만들다 보면 “일단 public으로 열어두고 나중에 정리할까?”라는 유혹이 자주 생깁니다. 그런데 시간이 지나면 필드가 여기저기서 직접 수정되고, 원인을 찾기 어려운 버그가 늘어나요. 접근 제어자와 캡슐화는 이런 상황을 초기에 막아주는 가장 값싼 안전장치입니다.핵심 개념 (Java 접근 제어자와 캡슐화가 중요한 이유)캡슐화의 핵심은 “데이터(상태)를 숨기고, 의미 있는 동작(행위)만 공개한다”는 겁니다. 비유하자면 자동차 엔진룸을 운전자가 직접 만지게 두는 대신, 페달/핸들처럼 안전한 인터페이스만 제공하는 것과 비슷해요. 접근 제어자는 그..

JAVA 2026.02.15