Java 프로그래밍을 하다 보면 특정 디렉토리 안에서 PDF, JPG, TXT 같은 특정 확장자를 가진 파일만 찾아야 하는 경우가 자주 발생합니다. 이 글에서는 Java의 Files.walk()와 FilenameFilter 두 가지 방법을 사용해 확장자별로 파일을 검색하는 방법을 예제와 함께 살펴보겠습니다. 방법 1: Files.walk()와 Stream API 활용하기 java.nio.file 패키지의 Files.walk() 메서드는 지정한 디렉토리와 그 하위 디렉토리까지 모두 순회하며 Path 스트림을 반환합니다. 여기에 fil
Java에서 열거형(Enumeration, Enum)은 이름이 지정된 상수들의 집합을 나타냅니다. 열거형은 다음과 같은 문법으로 생성할 수 있습니다.enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }네, Java에서는 클래스 내부에 열거형을 정의할 수 있습니다. 또한 values() 메서드를 사용하면 열거형에 포함된 모든 상수 값을 배열 형태로 가져올 수 있습니다.예제 1: 클래스 내부에 열거형 정의하기public class Enumerat
자바에서 열거형(Enumeration, enum)은 이름이 지정된 상수들의 집합을 나타냅니다. 열거형은 다음과 같은 문법으로 생성할 수 있습니다.enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }메소드 안에서 열거형 정의가 불가능한 이유열거형은 클래스 내부에는 정의할 수 있지만, 메소드 내부에서는 정의할 수 없습니다. 만약 메소드 안에 열거형을 선언하려고 하면 컴파일 타임에 다음과 같은 오류가 발생합니다.enum types must not
Java에서 열거형(Enumeration, Enum)은 이름이 지정된 상수들의 집합을 나타냅니다. 열거형은 다음과 같은 문법으로 생성할 수 있습니다.enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }열거형의 내용을 가져오려면 values() 메서드를 사용합니다. 이 메서드는 해당 열거형에 포함된 모든 상수 값을 담고 있는 배열을 반환합니다. 배열을 얻은 후에는 for 루프(향상된 for문)를 사용하여 각 요소를 순회할 수 있습니다.예제 1:
String.format() 메서드는 형식 문자열(format string)과 가변 인수(varargs)를 받아, 지정된 형식에 맞게 변환된 String 객체를 반환합니다.이 메서드를 활용하면 double 값을 손쉽게 문자열로 변환할 수 있습니다. 형식 지정자로 %f를 전달하고, 함께 변환할 double 값을 인수로 넘기면 됩니다.예제 1: Scanner로 입력받은 값 변환하기import java.util.Scanner; public class ConversionOfDouble { public static void main(
StringBuilder 또는 StringBuffer 객체의 append() 메서드는 boolean, char, char 배열, double, float, int, long, String 등 다양한 타입의 값을 매개변수로 받아 현재 객체에 이어 붙이는 기능을 제공합니다.따라서 변환하고자 하는 double 값을 append() 메서드에 전달한 뒤, 결과 객체에 대해 toString()을 호출하면 손쉽게 문자열을 얻을 수 있습니다. 내부적으로는 String.valueOf()와 유사한 방식으로 숫자가 문자열로 변환됩니다.동작 원리1. 빈
자바에서 문자열은 java.lang 패키지의 String 클래스로 표현됩니다. 프로그램 내의 모든 문자열 리터럴(예: abc)은 모두 이 클래스의 인스턴스로 구현되며, String 객체는 한 번 생성되면 그 값을 변경할 수 없는 불변(immutable) 객체라는 특징이 있습니다. String 클래스의 valueOf() 메소드는 char, char 배열, double, float, int, long 또는 객체를 매개변수로 받아 해당 값의 문자열(String) 표현을 반환합니다. 다양한 타입의 데이터를 손쉽게 문자열로 변환해야 할 때
자바에서 상속(Inheritance)은 한 클래스가 다른 클래스의 속성과 기능을 물려받는 두 클래스 간의 관계를 의미합니다. 이러한 관계는 extends 키워드를 사용하여 다음과 같이 정의할 수 있습니다. public class A extends B { } 속성을 물려받는 클래스를 하위 클래스(sub class) 또는 자식 클래스(child class)라고 부르며, 속성을 물려주는 클래스를 상위 클래스(super class) 또는 부모 클래스(parent class)라고 합니다. 상속이 이루어지면 상위 클래스 멤버들의 복사본이 하위
상속(Inheritance)은 한 클래스가 다른 클래스의 속성과 기능을 물려받는 두 클래스 사이의 관계를 의미합니다. 이러한 관계는 extends 키워드를 사용하여 다음과 같이 정의할 수 있습니다. public class A extends B { } 속성을 상속받는 클래스를 하위 클래스(sub class) 또는 자식 클래스(child class)라고 하며, 속성을 물려주는 클래스를 상위 클래스(super class) 또는 부모 클래스(parent class)라고 합니다. 상속 관계에서는 하위 클래스 객체가 생성될 때 상위 클래스
상속(Inheritance)은 두 클래스 간의 관계로, 한 클래스가 다른 클래스의 속성과 기능을 물려받는 것을 의미합니다. 이 관계는 extends 키워드를 사용해 다음과 같이 정의할 수 있습니다.public class A extends B { }속성을 상속받는 클래스를 서브 클래스(sub class) 또는 자식 클래스라고 하며, 속성을 제공하는 클래스를 슈퍼 클래스(super class) 또는 부모 클래스라고 합니다.상속이 이루어지면 슈퍼 클래스의 멤버들이 서브 클래스 객체 안에 복사됩니다. 따라서 서브 클래스의 객체를 통해 부모
Java에서 인터페이스(Interface)는 클래스와 비슷하지만, 오직 추상 메소드(abstract method)와 final·static으로 선언된 필드만 가질 수 있다는 점에서 차이가 있습니다.인터페이스는 메소드 원형(method prototype)의 명세(specification)입니다. 프로그래머에게 구현 방향을 제시하거나, 특정 타입의 메소드와 필드가 어떻게 동작해야 하는지에 대한 계약(contract)을 정의하고 싶을 때 인터페이스를 사용합니다.클래스가 특정 명세를 따르도록 하려면 해당 인터페이스를 구현(implement
Java에서 인터페이스(Interface)는 클래스와 유사하지만, 오직 추상 메소드와 final이며 static인 필드만 포함할 수 있다는 점이 다릅니다.그러나 Java 8부터는 인터페이스에 정적(static) 메소드와 기본(default) 메소드가 도입되었습니다. 다른 추상 메소드와 달리 이 메소드들은 기본 구현(메소드 본문)을 가질 수 있습니다. 따라서 인터페이스에 기본 메소드가 존재하더라도, 해당 인터페이스를 이미 구현하고 있는 클래스에서 반드시 재정의(오버라이드)할 필요는 없습니다.즉, 구현 클래스의 객체를 통해 인터페이스의
상속(Inheritance)은 두 클래스 간의 관계로, 한 클래스가 다른 클래스의 속성과 기능을 물려받는 것을 의미합니다. 이 관계는 extends 키워드를 사용하여 정의할 수 있습니다. public class A extends B { } 속성을 상속받는 클래스를 하위 클래스(sub class) 또는 자식 클래스(child class)라고 하며, 속성을 제공하는 클래스를 상위 클래스(super class) 또는 부모 클래스(parent class)라고 부릅니다. 상속이 이루어지면 하위 클래스 객체 내부에 상위 클래스 멤버들의 복사본
연결 리스트(Linked List)란?연결 리스트는 각 노드가 두 개의 블록으로 구성된 선형 자료구조입니다. 한쪽 블록에는 노드의 값(데이터)이 저장되고, 다른 블록에는 다음 노드를 가리키는 주소가 저장됩니다.여기서 각 노드가 리스트 내의 다른 노드를 가리키는 포인터를 하나씩 갖고 있는 연결 리스트가 있다고 가정해 보겠습니다. 이때 과제는 두 연결 리스트가 서로 교차하는 노드를 찾는 것입니다. 만약 두 리스트가 교차하지 않는다면 결과로 NULL 또는 빈 값을 반환하면 됩니다.예시 1입력:출력:2설명: 주어진 연결 리스트는 값이 2인
소인수가 2, 3, 5뿐인 수를 못생긴 숫자(Ugly Number)라고 부릅니다. 예를 들어 못생긴 숫자의 나열은 다음과 같습니다.1, 2, 3, 4, 5, 6, 8, 10, 12, 15, ...이번 글에서는 숫자 N이 주어졌을 때, 위 수열에서 N번째에 해당하는 못생긴 숫자를 찾는 방법을 자바 코드와 함께 알아보겠습니다.문제 이해하기예제를 통해 문제를 살펴보겠습니다.입력 예시 1:N = 5출력:5설명: 못생긴 숫자 수열 [1, 2, 3, 4, 5, 6, 8, 10, 12, 15]에서 5번째 숫자는 5입니다.입력 예시 2:N = 7
Java에서 컬렉션(Collection)을 순회할 때 사용하는 대표적인 인터페이스로 Iterator와 ListIterator가 있습니다. 두 인터페이스는 이름이 비슷하지만 지원하는 컬렉션의 종류, 순회 방향, 제공하는 기능에서 뚜렷한 차이를 보입니다. 이 글에서는 두 인터페이스의 특징과 차이점을 자세히 살펴보겠습니다.Iterator란?Iterator는 Java 컬렉션 프레임워크에서 가장 기본이 되는 순회자(반복자) 인터페이스입니다. 주요 특징은 다음과 같습니다.다양한 컬렉션 순회 가능: Map, List, Set 등 대부분의 컬렉션
자바에서 HashMap과 TreeMap은 모두 Map 인터페이스를 구현하는 대표적인 컬렉션 클래스입니다. 두 클래스는 이름은 비슷하지만 내부 구조, 동작 방식, 성능 특성에서 큰 차이를 보입니다. 이 글에서는 두 클래스의 차이점을 항목별로 살펴보고, 어떤 상황에서 어떤 클래스를 선택하는 것이 좋은지 알아보겠습니다. HashMap이란? 자바의 해시 테이블(Hash Table) 기반 자료구조입니다. Map 인터페이스의 구현체로, Map, Cloneable, Serializable 인터페이스를 함께 구현합니다. null 키는 최대 하
자바(Java)에서 컬렉션의 요소를 순회할 때 사용되는 대표적인 방식으로 Iterator와 Enumeration이 있습니다. 두 인터페이스는 비슷한 역할을 하지만, 기능과 사용 범위에서 중요한 차이점이 있습니다. 이번 글에서는 두 인터페이스의 차이를 자세히 살펴보겠습니다. Iterator란? Iterator는 자바 컬렉션 프레임워크에서 제공하는 표준 순회 인터페이스로, 다음과 같은 특징을 가집니다. 범용 커서(Universal Cursor): 모든 컬렉션 클래스에 적용할 수 있습니다. remove() 메서드 지원: 순회 중에 요소
Java에서 멀티스레딩을 다루다 보면 sleep()과 wait() 메서드를 자주 접하게 됩니다. 두 메서드 모두 스레드의 실행을 일시적으로 멈추는 역할을 하지만, 동작 방식과 사용 목적은 크게 다릅니다. 이 글에서는 두 메서드의 핵심 차이점을 자세히 살펴보겠습니다.wait() 메서드란?wait() 메서드는 Object 클래스에 정의되어 있으며, 주로 스레드 간 통신(inter-thread communication)에 사용됩니다.소속 클래스: Object 클래스에 속합니다.락 처리: 동기화가 진행되는 동안 해당 객체의 락(lock)을
Java의 Map 컬렉션을 다루다 보면 HashMap과 LinkedHashMap 중 어떤 것을 선택해야 할지 고민하게 됩니다. 두 클래스는 모두 Map 인터페이스를 구현하지만, 내부 구조와 데이터 저장 방식, 그리고 성능 특성에서 중요한 차이가 있습니다. 이 글에서는 두 클래스의 차이점을 명확하게 정리해 드립니다.HashMap이란?HashMap은 Java에서 가장 널리 사용되는 Map 구현체로, 키(Key)와 값(Value)의 쌍을 해시 기반으로 빠르게 저장하고 조회할 수 있습니다.데이터의 삽입 순서를 보장하지 않습니다. 요소를 꺼