본문 바로가기
728x90

Language167

[JAVA] Java 14/16의 Record 키워드 : 데이터 클래스의 혁명 자바 개발자라면 누구나 한 번쯤은 단순한 데이터 저장을 위한 클래스를 작성하면서 반복적이고 지루한 코드에 지쳤던 경험이 있을 것입니다. 필드를 선언하고, 생성자를 만들고, 모든 필드에 대한 Getter 메서드를 정의하고, equals(), hashCode(), toString() 메서드까지 수동으로 구현하거나 IDE의 도움을 받아야 했습니다. 이러한 상용구(boilerplate) 코드는 코드의 가독성을 저해하고 유지보수를 어렵게 만드는 주범이었습니다. 하지만 Java 14에서 미리보기(preview) 기능으로 도입되어 Java 16에서 정식 기능으로 확정된 record 키워드는 이러한 문제에 대한 자바 플랫폼의 우아하고 강력한 해답을 제시합니다. record는 불변(immutable) 데이터를 간결하게 .. 2026. 1. 23.
[JAVA] Java 11 : LTS의 시작과 새로운 HTTP 클라이언트 전환점 자바(Java) 생태계에서 Java 11은 단순한 버전 업데이트 이상의 의미를 갖습니다. Java 8 이후 등장한 첫 번째 LTS(Long Term Support) 버전으로서, 엔터프라이즈 환경의 표준을 제시했기 때문입니다. 특히 기존의 복잡했던 외부 라이브러리 의존성을 줄이고 성능을 극대화한 '표준 HTTP 클라이언트'의 도입은 현대적인 네트워크 프로그래밍의 기준을 바꾸어 놓았습니다. 본 포스팅에서는 Java 11에서 반드시 알아야 할 핵심 변경 사항과 실무 활용 예시를 전문적인 시각에서 분석합니다.1. Java 11의 핵심 변화: 유료화와 LTS 모델Java 11부터 Oracle JDK의 라이선스 정책이 변경되었습니다. 구독형 모델이 도입되면서 많은 기업이 OpenJDK로 눈을 돌리게 된 계기가 되기.. 2026. 1. 23.
[JAVA] Java 10 var 키워드 완벽 가이드 : 지역 변수 타입 추론의 마법 1. var 키워드(LVTI)란 무엇인가?Java 10에서 도입된 지역 변수 타입 추론(Local-Variable Type Inference, LVTI)은 개발자가 명시적으로 타입을 선언하는 대신 var라는 키워드를 사용하여 변수를 선언할 수 있게 해주는 기능입니다. 컴파일러가 우변에 위치한 초기화 식을 보고 변수의 타입을 자동으로 추론하기 때문에, 강력한 정적 타입 시스템의 장점을 유지하면서도 코드의 장황함을 획기적으로 줄여줍니다. 중요한 점은 Java가 JavaScript처럼 동적 타입 언어로 변하는 것이 아니라는 점입니다. var는 컴파일 타임에 결정되며, 한 번 결정된 타입은 절대 변하지 않습니다.2. var를 사용할 수 있는 곳과 없는 곳var는 모든 곳에서 만능으로 사용될 수 없습니다. 사용 .. 2026. 1. 23.
[JAVA] Java 9 모듈 시스템(Project Jigsaw) 완벽 가이드 : 거대해진 자바를 구조화하다 1. Project Jigsaw: 왜 자바는 '모듈'을 선택했는가?Java 9의 탄생과 함께 등장한 모듈 시스템(JPMS: Java Platform Module System), 일명 'Project Jigsaw'는 자바 언어의 구조를 근본적으로 뒤바꾼 혁명적인 변화입니다. 그동안 자바는 거대한 rt.jar 파일 하나에 모든 표준 라이브러리를 담아 배포해 왔습니다. 이로 인해 아주 작은 애플리케이션을 구동할 때도 수백 메가바이트의 런타임 환경이 필요했고, 이는 클라우드 네이티브 환경과 마이크로서비스 아키텍처(MSA) 시대로 접어들며 큰 약점이 되었습니다. Project Jigsaw는 자바 런타임 자체를 쪼개고, 개발자가 작성하는 코드 역시 '모듈'이라는 단위로 캡슐화할 수 있게 하여 보안성과 효율성을 극대.. 2026. 1. 23.
[JAVA] Method Reference 완벽 가이드 : 코드를 예술로 만드는 방법 1. 메서드 참조(Method Reference)란 무엇인가?Java 8에서 도입된 메서드 참조(Method Reference)는 람다 표현식이 단 하나의 메서드만을 호출할 때, 이를 더 간결하고 명확하게 표현할 수 있는 방법입니다. 단순히 람다의 '축약형'이라고 생각할 수 있지만, 실제로는 코드의 가독성을 극대화하고 메서드 이름을 직접 사용하여 의도를 명확히 전달하는 강력한 도구입니다. 기존의 람다 표현식이 (x) -> System.out.println(x)라면, 메서드 참조는 System.out::println으로 작성됩니다. 불필요한 매개변수 선언을 제거하고 오직 '어떤 메서드를 실행할 것인가'에만 집중합니다.2. 메서드 참조가 필요한 이유와 장점단순히 코드가 짧아진다는 것 외에도 메서드 참조는 소.. 2026. 1. 23.
[JAVA] Optional<T> Class를 사용하는 이유는? Null과의 전쟁을 끝내는 법 자바 프로그래머라면 누구나 한 번쯤 NullPointerException(NPE)이라는 불청객 때문에 고생한 경험이 있을 것입니다. 런타임에 갑자기 튀어나와 프로그램의 흐름을 끊어버리는 이 예외를 방지하기 위해, 우리는 습관적으로 if (obj != null)과 같은 방어적인 코드를 남발하곤 했습니다. 이러한 불편함을 우아하게 해결하기 위해 Java 8부터 등장한 것이 바로 Optional 클래스입니다. 본 포스팅에서는 단순히 NPE를 막는 수단을 넘어, 가독성 높은 API를 설계하고 코드의 의도를 명확히 전달하기 위해 왜 Optional을 사용해야 하는지 심도 있게 다루어 보겠습니다.1. Optional이란 무엇인가?Optional는 "존재할 수도 있고, 존재하지 않을 수도 있는 객체"를 감싸는 래퍼(.. 2026. 1. 22.
728x90