java.lang.String 클래스는 문자열을 다룰 수 있는 다양한 메서드를 제공합니다. 이러한 메서드를 활용하면 공백 제거(trim), 문자열 연결(concatenation), 형 변환(conversion), 비교(comparison) 등의 작업을 손쉽게 수행할 수 있습니다.특히 replaceAll() 메서드와 정규식을 함께 사용하면, 주어진 문자열에서 숫자만 간단하게 추출할 수 있습니다. 이 방법은 숫자가 아닌 모든 문자([^0-9])를 빈 문자열()로 치환하는 원리로 동작합니다.예제 코드아래 예제는 사용자로부터 키보드로 문자
java.lang.Runtime 클래스는 Object 클래스의 하위 클래스로, 프로그램이 실행되고 있는 환경에 대한 다양한 정보에 접근할 수 있도록 지원합니다. Java 런타임 환경은 각 애플리케이션마다 이 클래스의 단일 인스턴스를 자동으로 생성하여 연결해 줍니다.흥미로운 점은 Runtime 클래스에 public 생성자가 없다는 것입니다. 따라서 개발자가 new 키워드로 직접 인스턴스를 생성할 수 없으며, 반드시 getRuntime() 메서드를 호출하여 현재 Runtime 객체의 참조를 얻어야 합니다. 이러한 설계는 싱글톤(Sing
Java Boolean 클래스란?java.lang.Boolean 클래스는 final로 선언된 클래스이며, 모든 자바 클래스의 최상위 클래스인 Object 클래스를 상속받습니다. 이 클래스는 기본 타입(primitive type)인 boolean 값을 Boolean 객체로 감싸는 래퍼(Wrapper) 클래스입니다.Boolean 타입의 객체는 내부적으로 boolean 타입의 필드 하나를 가지고 있습니다. 즉, 래퍼 클래스는 기본 데이터 타입을 객체 형태로 다룰 수 있게 해주며, 컬렉션 프레임워크(List, Map 등)처럼 객체만 저장할
java.lang.StrictMath 클래스는 final로 선언된 클래스이며, Object 클래스의 하위 클래스입니다. 이 클래스는 지수 함수, 로그, 제곱근, 그리고 삼각 함수와 같은 기본적인 수치 연산을 수행하기 위한 다양한 메서드를 제공합니다. StrictMath 클래스의 모든 메서드는 static(정적) 메서드이기 때문에 객체(인스턴스)를 생성할 필요가 없다는 점이 특징입니다. 대표적인 메서드로는 abs(), acos(), asin(), atan(), ceil(), floor(), log(), max(), min(), pow
자바 Process 클래스란?java.lang.Process는 Object 클래스의 하위 클래스로, Runtime 클래스의 exec() 메서드를 통해 시작된 운영체제 프로세스를 표현합니다. 생성된 Process 객체를 사용하면 해당 프로세스를 제어할 수 있으며, 입출력 스트림 확인이나 종료 상태 조회 같은 프로세스 관련 정보도 얻을 수 있습니다.Process 클래스는 추상(abstract) 클래스이므로 직접 인스턴스화할 수 없습니다. 따라서 반드시 Runtime 객체의 exec() 메서드 또는 ProcessBuilder를 통해서만
Java에서 객체에 대해 wait() 메서드를 호출하면 현재 스레드는 다른 스레드가 해당 객체의 notify() 또는 notifyAll() 메서드를 호출할 때까지 대기 상태로 전환됩니다. 반면 wait(long timeout)은 다른 스레드가 notify() 또는 notifyAll()을 호출하거나, 지정된 시간(timeout)이 경과하는 경우 두 조건 중 하나라도 충족되면 대기에서 벗어납니다.wait() 메서드의 동작아래 프로그램처럼 객체에 대해 wait()를 호출하면 스레드는 실행(running) 상태에서 대기(waiting) 상
Java에서 클래스(Class)/정적(Static) 메서드는 특정 객체 인스턴스가 아닌 클래스 자체에 호출되는 메서드를 의미합니다. static 키워드를 사용하면 해당 구현이 모든 클래스 인스턴스에서 동일하게 유지됩니다.클래스/정적 메서드는 객체 생성(instantiation) 없이 호출할 수 있다는 것이 가장 큰 특징입니다. 따라서 정적 메서드 내부에서는 같은 클래스의 다른 정적 멤버(static members)만 직접 접근할 수 있습니다.Java에는 이미 많은 내장 정적 메서드가 존재하는데, 대표적으로 Math.random(),
Java 컴파일 과정에서 자주 마주치는 cannot find symbol(기호를 찾을 수 없음) 오류는 주로 컴파일 중인 프로그램에 선언되지 않은 변수를 참조하려고 할 때 발생합니다. 쉽게 말해, 컴파일러가 개발자가 가리키는 변수나 식별자가 무엇인지 인식하지 못한다는 의미입니다.Cannot find symbol 오류의 주요 원인선언되지 않은 변수 사용 — 코드 어디에도 선언되지 않았거나 현재 유효 범위(scope)를 벗어난 변수를 참조하는 경우대소문자 및 철자 오류 — Java는 대소문자를 엄격하게 구분하므로 tutorials와 T
JLabel은 JComponent 클래스의 하위 클래스로, GUI 화면에 텍스트 안내문이나 정보를 표시하는 데 사용되는 컴포넌트입니다. JLabel은 한 줄의 읽기 전용 텍스트, 이미지, 또는 텍스트와 이미지를 함께 표시할 수 있습니다. 또한 JLabel은 PropertyChangeListener 인터페이스를 명시적으로 등록하여 속성 변화를 감지할 수도 있습니다. JLabel에서 움직이는 텍스트(marquee 효과)를 구현하려면 Timer 클래스를 활용하는 것이 가장 일반적입니다. Timer는 지정한 속도(밀리초 단위)와 이벤트를
네, Java의 Enum(열거형)은 인터페이스를 구현할 수 있습니다. 이 기능은 특정 객체나 클래스의 고유한 속성과 밀접하게 연관된 비즈니스 로직을 구현해야 할 때 특히 유용합니다.Enum은 Java 1.5 버전에서 도입된 특수한 데이터 타입입니다. Enum의 상수들은 기본적으로 static(정적)이며 final(불변)로 선언되기 때문에, 관례상 Enum 타입 필드의 이름은 모두 대문자로 작성하는 것이 좋습니다.Enum이 인터페이스를 구현하는 방법아래 예제는 Enum이 인터페이스를 구현하여 각 상수마다 서로 다른 연산 동작을 정의하
Java의 Byte 클래스는 Number 클래스의 하위 클래스로, 기본 타입(primitive type)인 byte 값을 객체 형태로 감싸는 래퍼(wrapper) 클래스입니다. Byte 타입의 객체는 byte 타입의 필드를 하나만 가지고 있습니다.Byte 클래스가 제공하는 주요 메서드로는 byteValue(), compare(), compareTo(), decode(), parseByte(), valueOf() 등이 있습니다. 그중 decode() 메서드와 byteValue() 메서드를 함께 사용하면 16진수 값을 손쉽게 byte
Java에서 표준 입력(stdin)은 System.in 객체로 표현됩니다. System.in은 InputStream 클래스의 인스턴스로, 모든 메서드가 문자열(String)이 아닌 바이트(byte) 단위로 동작합니다. 따라서 키보드로부터 데이터를 읽어 들이려면 Reader 계열의 클래스나 Scanner 클래스를 활용하는 것이 일반적입니다.예제 1 — BufferedReader 사용BufferedReader와 InputStreamReader를 조합하면 콘솔 입력을 한 줄씩 문자열로 읽을 수 있습니다. 이후 Integer.parseIn
Java Timer 클래스란? Java의 Timer 클래스는 지정된 시간에 작업(task)을 한 번 실행하거나 반복적으로 실행하도록 예약하는 기능을 제공합니다. 또한 백그라운드에서 데몬(daemon) 스레드로 동작하게 할 수도 있는데, 이 경우 boolean 값을 전달받는 생성자를 사용하면 됩니다. 고정 지연(Fixed Delay)과 고정 속도(Fixed Rate) Timer는 두 가지 방식으로 작업을 예약할 수 있습니다. 고정 지연(fixed delay): 특정 실행이 System GC 등으로 인해 지연되면 이후의 모든 실행도
싱글톤(Singleton) 패턴은 클래스의 인스턴스가 오직 하나만 생성되도록 제한하는 디자인 패턴입니다. 자바에서는 열거형(enum)을 활용하면 가장 간결하고 안전하게 싱글톤을 구현할 수 있습니다. 이때 INSTANCE는 열거형 인스턴스를 나타내는 public static final 필드입니다.EnumSingleton.INSTANCE처럼 필드에 직접 접근하는 것도 가능하지만, 향후 구현 방식을 변경할 가능성에 대비해 getter 메서드로 캡슐화해 두는 것이 더 좋은 설계입니다.열거형으로 싱글톤을 구현해야 하는 이유단일 인스턴스 보장
StringWriter 클래스는 Writer 클래스의 하위 클래스로, 문자열을 출력 스트림(output stream)에 기록하는 역할을 담당합니다. 이 문자 스트림은 문자열을 쓸 때 데이터를 내부의 StringBuffer(문자열 버퍼)에 차곡차곡 모아두었다가 하나의 완성된 문자열로 구성합니다. StringWriter의 버퍼는 저장되는 데이터 양에 따라 자동으로 확장되기 때문에 미리 용량을 지정할 필요가 없다는 점이 큰 장점입니다. 주요 메서드 write(): 문자열 또는 단일 문자를 내부 버퍼에 기록합니다. append(): C
자바에서는 서로 연관된 클래스와 인터페이스를 하나의 패키지(package)로 묶어 관리합니다. 패키지는 특정 개념에 속한 클래스와 인터페이스를 담아두는 디렉터리라고 생각하면 이해하기 쉽습니다. 예를 들어, 입력·출력 작업과 관련된 모든 클래스와 인터페이스는 java.io 패키지에 포함되어 있습니다.패키지 생성하기클래스나 인터페이스 파일의 최상단에 package 키워드로 패키지 이름을 선언하면, 해당 클래스와 인터페이스를 원하는 패키지 아래로 그룹화할 수 있습니다.예제package com.tutorialspoint.mypackage;
Java에서 fillInStackTrace() 메서드는 Throwable 클래스에 속한 중요한 메서드입니다. 스택 트레이스(stack trace)는 예외가 정확히 어느 지점에서 발생했는지 파악하는 데 유용한 정보를 제공합니다.그런데 실제 개발 과정에서는 예외를 잡은 후 다시 던지는(재던지기, rethrow) 상황이 자주 발생합니다. 이때 기존 스택 트레이스를 그대로 두면 예외가 최초 발생한 위치만 보여주기 때문에, 예외가 어디에서 다시 던져졌는지 알기 어렵습니다. 바로 이런 경우에 fillInStackTrace() 메서드를 활용하면
clone() 메소드는 Cloneable 인터페이스를 구현한 클래스의 객체 복사본을 생성하는 데 사용됩니다. 기본적으로 필드 단위(field-by-field) 복사를 수행하는데, 그 이유는 Object 클래스가 clone() 메소드를 호출하는 특정 클래스의 멤버 정보를 알 수 없기 때문입니다.따라서 클래스가 기본형(primitive) 데이터 타입 멤버만 가지고 있다면 새로운 객체 복사본이 생성되고, 그 새 객체에 대한 참조가 반환됩니다. 하지만 클래스에 다른 클래스 타입의 멤버가 포함되어 있다면 해당 멤버들의 객체 참조만 복사되므로
StringReader 클래스는 Reader 클래스의 하위 클래스로, 문자열을 입력 소스로 삼아 문자 스트림(character stream)을 읽을 때 사용됩니다. 즉, 파일이나 네트워크가 아닌 메모리에 있는 문자열 자체를 스트림처럼 다룰 수 있게 해주는 클래스입니다. StringReader는 Reader 클래스가 제공하는 모든 메서드를 오버라이드(재정의)하며, 대표적인 메서드로는 skip(), close(), mark(), markSupported(), reset() 등이 있습니다. 문법(Syntax) public class St
직렬화(Serialization)는 Java 객체를 객체의 데이터와 함께 객체 타입 및 저장된 데이터의 타입 정보까지 포함하는 바이트 스트림 형태로 저장하는 과정입니다. 즉, 직렬화는 Java 객체의 값과 상태를 바이트로 변환하여 네트워크를 통해 전송하거나 파일로 저장할 수 있도록 해줍니다. 반대로 역직렬화(Deserialization)는 이렇게 저장된 바이트 코드를 다시 원래의 Java 객체로 복원하는 과정입니다. transient(임시) 변수는 직렬화 과정에서 그 값이 저장되지 않는 변수입니다. 따라서 역직렬화를 수행하면 해당