liminfo

Java Reference

Java 프로그래밍 레퍼런스

40개 결과

Java Reference 소개

Java 레퍼런스는 Java 프로그래밍 언어의 기초부터 최신 기능까지 다루는 포괄적이고 검색 가능한 치트 시트입니다. 기본문법(변수, var 타입 추론, 제어 흐름, 배열, 텍스트 블록, 패턴 매칭 instanceof), 클래스(상속, 추상 클래스, enum, record, sealed class, 내부 클래스), 인터페이스(함수형 인터페이스, 디폴트/정적 메서드, 람다), 제네릭(제네릭 클래스, 제네릭 메서드, 와일드카드), 컬렉션(List, Map, Set, Queue, Deque, 유틸리티 메서드), 스트림(스트림 생성, filter/map/collect, reduce, Optional), 동시성(Thread, ExecutorService, CompletableFuture, synchronized, volatile, AtomicInteger), 예외처리(try/catch/finally, throws, 사용자 정의 예외, try-with-resources)의 8개 카테고리로 구성됩니다.

이 레퍼런스는 언어를 배우는 초보자부터 API 서명이나 최신 기능을 빠르게 확인해야 하는 시니어 엔지니어까지 모든 수준의 Java 개발자를 위해 설계되었습니다. 코드 예제는 독립적으로 실행 가능하며, Java 10부터 17까지 도입된 var 타입 추론, record 클래스, sealed 클래스, 향상된 switch 표현식 등 현대적인 관용구를 모두 포함합니다.

각 항목에는 구문 이름, 간단한 설명, 완전한 코드 예제가 포함됩니다. 8개 카테고리 구조는 대부분의 Java 개발자가 사용하는 멘탈 모델과 일치합니다: 언어 기초부터 시작하여 객체 지향 구조를 거쳐 제네릭, 컬렉션, 스트림, 동시성, 오류 처리 등 표준 라이브러리 주제로 나아갑니다. 일상적인 개발, 코드 리뷰, 기술 면접 준비에 모두 유용합니다.

주요 기능

  • var 타입 추론(Java 10), 텍스트 블록(Java 13), 패턴 매칭 instanceof(Java 16) 예제
  • record 클래스(Java 16)와 sealed 클래스(Java 17)의 완전한 구문 예시
  • 간결한 조건 할당을 위한 화살표 구문이 있는 향상된 switch 표현식
  • ArrayList, HashMap, HashSet, LinkedList, ArrayDeque의 일반적인 컬렉션 연산
  • Stream API: filter, map, collect, reduce, partitioningBy, Stream.toList()(Java 16)
  • supplyAsync, thenApply, thenAccept, exceptionally를 사용한 CompletableFuture 체이닝
  • synchronized 메서드, volatile 필드, AtomicInteger, ExecutorService 스레드 풀 동시성 기본 요소
  • try-with-resources를 사용한 자동 리소스 관리와 사용자 정의 예외 클래스 패턴

자주 묻는 질문

Java에서 var, final, 일반 변수 선언의 차이는 무엇인가요?

var(Java 10)는 컴파일 타임에 오른쪽 값에서 타입을 추론하며 지역 변수에만 유효합니다. final은 상수를 선언하며 한 번만 할당할 수 있습니다. 일반 타입 선언(예: int x = 5)은 어디서든 사용 가능하며 타입을 명시적으로 지정합니다.

Java에서 record 클래스와 일반 클래스는 언제 사용해야 하나요?

record(Java 16)는 값을 저장하고 조회하기만 하는 불변 데이터 캐리어에 이상적입니다. 생성자, equals, hashCode, toString을 자동으로 생성합니다. 가변 상태, 복잡한 생성자, 상속, 단순 데이터 저장을 넘어선 커스텀 로직이 필요한 경우 일반 클래스를 사용하세요.

Stream API에서 map()과 flatMap()의 차이는 무엇인가요?

map()은 각 요소에 함수를 적용하고 결과의 스트림을 반환합니다. flatMap()은 각 요소에 스트림을 반환하는 함수를 적용한 후 모든 스트림을 하나로 평탄화합니다. 각 요소가 여러 값이나 중첩 컬렉션에 매핑될 때 flatMap()을 사용하세요.

CompletableFuture는 Future와 어떻게 다른가요?

Future는 비동기 연산 결과를 가져오기 위한 블로킹 get() 메서드를 제공합니다. CompletableFuture는 논블로킹 콜백 체이닝(thenApply, thenAccept, thenCompose), 여러 future 결합(allOf, anyOf), 내장 오류 처리(exceptionally, handle)를 추가합니다. 현대 Java에서 비동기 코드에 권장되는 방식입니다.

Java에서 synchronized와 volatile의 차이는 무엇인가요?

synchronized는 한 번에 하나의 스레드만 블록을 실행하도록 보장합니다(상호 배제와 가시성). volatile은 단일 변수에 대한 읽기/쓰기가 모든 스레드에 즉시 표시되도록 하지만, 상호 배제는 제공하지 않습니다. 증분(읽기-수정-쓰기) 같은 복합 연산에는 volatile 대신 synchronized나 AtomicInteger를 사용하세요.

sealed 클래스란 무엇이고 왜 사용하나요?

sealed 클래스(Java 17)는 permits 절을 사용하여 확장할 수 있는 클래스를 제한합니다. Circle이나 Rectangle만 될 수 있는 Shape처럼 닫힌 타입 계층을 모델링하는 데 유용합니다. sealed 클래스는 switch 표현식의 패턴 매칭과 잘 어울려 컴파일 타임에 완전한 케이스 처리를 가능하게 합니다.

try-with-resources는 무엇이며 언제 사용해야 하나요?

try-with-resources(Java 7)는 예외가 발생하더라도 try 블록 끝에서 AutoCloseable을 구현하는 모든 리소스를 자동으로 닫습니다. 리소스 누수를 방지하기 위해 스트림, 리더, 라이터, 데이터베이스 연결 등 닫아야 하는 리소스를 열 때마다 사용하세요.

List.of(), Arrays.asList(), new ArrayList()의 차이는 무엇인가요?

List.of()는 add/remove 시 UnsupportedOperationException을 던지는 불변 리스트를 반환합니다. Arrays.asList()는 배열로 지원되는 고정 크기 리스트를 반환합니다 — 요소를 set할 수는 있지만 add나 remove는 불가능합니다. new ArrayList()는 완전히 가변적인 리스트를 반환합니다. 가변성 필요 여부에 따라 선택하세요.