JShell은 Java 9에서 새롭게 도입된 대화형 도구로, Java 언어의 다양한 기능과 방대한 라이브러리를 손쉽게 탐색하고 실험해 볼 수 있도록 도와줍니다.관계 연산자(Relational Operators)란?관계 연산자(==, !=, <, >, <=, >=)는 주로 두 값의 비교를 위해 사용됩니다. 이 연산자는 boolean이 아닌 기본(primitive) 데이터 타입의 피연산자를 받아들이며, 그 결과로 boolean 값(true 또는 false)을 반환합니다.논리 연산자(Logical Operators)
Publisher는 무제한 개수의 순차적 요소를 제공하며, 구독자(Subscriber)로부터 전달받은 요구(demand)에 따라 이를 발행하는 역할을 담당합니다. Publisher<T> 인터페이스는 T 타입의 요소를 발행하는 기능을 수행하며, 구독자가 자신과 연결될 수 있도록 subscribe() 메서드를 제공합니다.public interface Publisher<T> { public void subscribe(Subscriber<? super T> s);}R
JShell이란 무엇인가?JShell은 Java 9에서 처음 도입된 REPL(Read-Eval-Print-Loop) 대화형 도구입니다. 사용자가 입력한 코드를 즉시 평가하고 그 결과를 바로 출력해 주기 때문에, 간단한 코드 조각을 테스트하거나 Java의 새로운 기능을 학습할 때 매우 유용합니다.LocalDate 클래스 소개java.time.LocalDate 클래스는 날짜 정보를 손쉽게 조회할 수 있는 다양한 메서드를 제공합니다. 이 클래스를 통해 다음과 같은 정보를 얻을 수 있습니다.날짜 관련 정보: 연도, 월, 일, 요일 등날짜
JShell이란?JShell은 Java 9에서 새롭게 도입된 대화형(REPL) 도구입니다. 표현식, 변수, 메서드, 클래스 등 간단한 문장을 입력으로 받아 즉시 실행 결과를 보여주기 때문에, 코드 조각을 빠르게 테스트하고 학습하는 데 매우 유용합니다.중간 스트림 연산이란?스트림(Stream)은 값들이 나열된 연속적인 흐름을 의미합니다. 여기서 중간 스트림 연산(intermediate stream operation)은 하나의 스트림을 입력으로 받아 처리한 후, 그 결과로 새로운 스트림을 반환하는 연산을 말합니다. 예를 들어 람다 표현
Java 9에서는 현재 실행 중인 스레드의 스택에 접근할 수 있는 표준 API를 제공하는 StackWalker 클래스가 새롭게 도입되었습니다. 그 이전 버전의 Java에서는 Throwable::getStackTrace, Thread::getStackTrace, SecurityManager::getClassContext 등에서 제공하는 메서드를 통해 스레드 스택을 얻어야 했습니다.Thread.getStackTrace() 메서드는 해당 스레드의 스택 덤프 정보를 담은 StackTraceElement[] 배열을 반환합니다. 배열의 첫 번
JShell은 Java 9부터 도입된 대화형(인터랙티브) 도구로, 간단한 문장이나 표현식을 입력으로 받아 즉시 평가하고 그 결과를 바로 화면에 출력해 줍니다. 별도의 클래스 파일 작성이나 컴파일 과정 없이 코드를 실험할 수 있어 학습과 프로토타이핑에 매우 유용합니다.터미널 연산(Terminal Operation)이란?터미널 연산은 스트림을 입력으로 받아 새로운 출력 스트림을 반환하지 않는 스트림 연산을 의미합니다. 터미널 연산이 실행되는 순간 스트림 파이프라인이 최종 처리되며, 그 결과로 단일 값을 반환합니다. 반환되는 값은 하나의
JShell은 Java 9에서 새롭게 도입된 REPL(Read-Evaluate-Print-Loop) 기반의 대화형 도구입니다. 이 도구를 사용하면 간단한 문장을 실행하고, 그 결과를 즉시 평가하여 출력할 수 있어 코드를 빠르게 테스트하고 학습하는 데 매우 유용합니다. switch 문은 여러 조건을 한 번에 검사할 수 있는 제어문으로, else 절과 유사한 방식으로 동작하며 일치하지 않는 경우를 대비한 default 처리도 지원합니다. 어떤 case와도 일치하지 않으면 default 절이 실행되며, 조건이 성공적으로 일치한 후에는 b
StackWalker API란? StackWalker API는 Java 9에서 새롭게 도입된 기능으로, 현재 스레드의 스택 트레이스(stack trace) 스냅샷을 원하는 시점에 캡처하고 이를 순차적으로 탐색할 수 있는 메서드를 제공합니다. 기존의 Thread::getStackTrace() 방식 대신 StackWalker 클래스를 사용하면 다음과 같은 장점이 있습니다. 특정 클래스를 필터링하거나 건너뛰기(skip)할 수 있습니다. 선언 클래스(declaring class) 자체의 인스턴스를 직접 얻을 수 있습니다. 전체 스택 트레
Java 9부터는 java.lang.StackWalker 클래스를 통해 스택 프레임을 다루는 표준 API가 제공됩니다. 이 클래스는 스택 프레임에 대한 지연(lazy) 접근 방식을 허용하여 높은 효율성을 갖도록 설계되었습니다. 또한 구현(implementation) 프레임이나 리플렉션(reflection) 프레임까지 포함한 스택 트레이스를 얻을 수 있는 여러 옵션도 함께 제공되며, 이러한 기능은 디버깅 작업 시 특히 유용하게 활용됩니다.예를 들어, StackWalker 인스턴스를 생성하는 시점에 SHOW_REFLECT_FRAMES
자바의 모든 기본 타입(primitive type)에는 이에 대응하는 내장 래퍼(wrapper) 클래스가 존재하며, 이러한 래퍼 클래스들은 모두 불변(immutable)입니다. Integer, Float, Double, Byte 등이 대표적인 내장 래퍼 클래스에 해당합니다. 코드에서 래퍼 클래스를 사용하는 주된 이유는 크게 세 가지입니다. 첫째, 해당 기본 타입에 대한 타입 정보에 접근할 수 있고, 둘째, 기본 타입 데이터가 자동으로 객체 참조 타입으로 변환되는 오토 박싱(Auto-Boxing) 기능을 활용할 수 있으며, 셋째, 컬
JShell은 Java 9부터 도입된 명령줄(command-line) 도구로, 간단한 문장, 표현식, 클래스, 메서드, 변수 등을 입력하면 그 결과를 즉시 화면에 출력해 주는 대화형 환경입니다. 코드를 파일로 저장하고 컴파일하는 과정 없이도 자바 문법을 빠르게 실험하고 학습할 수 있어 초보자에게 특히 유용합니다.자바에서 배열(array) 역시 하나의 객체(object)입니다. 배열을 사용하려면 먼저 선언한 뒤 생성해야 하며, 정수 배열을 담을 변수를 선언할 때는 int[] array와 같이 표기합니다. 배열의 인덱스(index)는
jdeprscan 도구란 무엇인가? jdeprscan은 클래스, 아카이브(JAR), 폴더를 대상으로 정적 분석(static analysis)을 수행하여 사용 중단(deprecated)으로 표시된 API 요소를 찾아내는 도구입니다. Java 애플리케이션을 최신 JDK 버전으로 마이그레이션하기 전에 코드베이스를 점검할 때 매우 유용하게 활용됩니다. 다만 이 도구에는 몇 가지 중요한 특징이 있습니다. Java SE 전용 감지: jdeprscan은 Java SE에서 사용 중단으로 표시된 항목만 감지하며, 서드파티 라이브러리나 기타 라이브
JShell은 Java 9에 도입된 대화형(REPL) 도구로, 사용자가 입력한 코드를 즉시 평가하고 그 결과를 화면에 출력해 줍니다. 별도의 컴파일 과정 없이 자바 코드를 한 줄씩 실행하며 학습하고 테스트할 수 있어 매우 유용합니다.참조 타입이란?기본형(primitive type)과 달리 참조 타입(reference type)은 값을 직접 저장하지 않습니다. 대신 실제 값이 저장되어 있는 메모리 주소(address)를 저장합니다. 즉, 참조 타입 변수는 데이터가 들어 있는 다른 메모리 위치를 가리키는 포인터 역할을 합니다.Java에
모듈(Module)은 Java 9에서 도입된 핵심 개념으로, 코드를 모듈이라 불리는 작은 단위의 컴포넌트로 분리할 수 있게 해줍니다. 각 모듈은 자신만의 명확한 책임을 가지며, 정상적으로 동작하기 위해 필요한 다른 모듈에 대한 의존성을 선언합니다. 모듈을 선언하려면 소스 코드의 루트 디렉터리에 module-info.java 파일을 포함시켜야 합니다.module-info 파일에는 여러 유형의 requires 절이 존재하며, 각각의 용도와 특징이 다릅니다.1) requires <module>기본적으로 모듈은 모듈 경로(mod
Java 9는 대화형 REPL(Read-Evaluate-Print-Loop) 도구인 JShell을 새롭게 도입하여, 코드 조각을 실행하고 그 결과를 즉시 확인할 수 있도록 지원합니다. 여기서 스니펫(snippet)이란 표준 자바 문법을 따르는 하나의 명령으로, 단일 표현식, 문장(statement) 또는 선언(declaration)을 의미합니다. 이번 글에서는 JShell 도구를 사용할 때 반드시 숙지해야 할 주요 규칙들을 살펴보겠습니다. JShell 사용 규칙 스니펫은 import 선언, 클래스 선언, 메서드 선언, 인터페이스
JShell은 Java 9부터 도입된 대화형 명령줄(command-line) 도구로, 표현식, 클래스, 메서드, 필드, 인터페이스 등 간단한 코드 조각을 컴파일 과정 없이 즉시 실행하고 결과를 확인할 수 있습니다. String 클래스는 자바의 기본 패키지인 java.lang에 포함되어 있으며, 다양한 텍스트 처리 작업을 위한 여러 메서드를 제공합니다.1) 문자열 유틸리티(String Utility)String 클래스는 개발 편의성을 높여주는 다양한 내장 유틸리티 메서드를 제공합니다. 대표적으로 indexOf(), lastIndexO
jdeps는 Java 클래스 의존성 분석 도구(Java Class Dependency Analyzer)로, 주어진 Java 클래스 파일의 패키지 수준 또는 클래스 수준 의존성을 보여주는 명령줄 도구입니다. 분석할 입력 클래스는 .class 파일 경로, 디렉터리, JAR 파일 또는 완전한 클래스 이름(fully qualified class name)으로 지정할 수 있습니다.jdeps는 JDK 8부터 JDK 설치에 포함되어 있으며, %JAVA_HOME%\bin\jdeps.exe 프로그램 파일로 제공됩니다. 만약 %JAVA_HOME%\b
Java 9 모듈 시스템에서 exports 절이란?모듈(Module)은 이름을 가진 코드와 데이터의 결합체입니다. 모듈은 다른 모듈에 대한 의존성을 선언하고, 외부에서 접근 가능한 public 타입을 포함하는 패키지를 내보내며(export), 자신이 사용하는 서비스나 제공하는 서비스 구현체를 명시합니다. 이러한 모든 정보는 module-info.java 파일에 정의되며, 이 파일은 모듈의 루트 디렉터리에 위치합니다.module-info.java 파일에서 사용할 수 있는 exports 절은 두 가지 형태가 있습니다.1) exports
Java 9 이전에는 확장(Extension) 클래스 로더와 애플리케이션(Application) 클래스 로더가 모두 java.net.URLClassLoader 클래스의 인스턴스였습니다. 그러나 Java 9부터는 클래스 로더의 분류 체계가 변경되어, 기존의 확장 클래스 로더를 대체하는 플랫폼 클래스 로더(Platform Class Loader)가 새롭게 도입되었습니다.플랫폼 클래스 로더가 도입된 주요 이유는 부트스트랩 클래스 로더(Bootstrap Class Loader)가 로드하는 클래스들이 기본적으로 모든 권한을 가지기 때문입니다
모든 자바(Java) 프로그램은 자바 가상 머신(JVM) 위에서 실행됩니다. 소스 코드가 컴파일되면 자바 클래스는 플랫폼에 독립적이고 기계에 종속되지 않는 바이트코드(bytecode)로 변환되며, 컴파일된 클래스는 .class 파일 형태로 저장됩니다. 이후 프로그램이 해당 클래스를 사용하려고 할 때 클래스 로더(ClassLoader)가 그 클래스를 메모리에 적재합니다. 클래스는 이름으로 참조되는 시점에 자바 환경에 도입되며, main() 메서드는 클래스 실행의 시작점 역할을 합니다. Java 9에서 달라진 클래스 로더 구조 Ja