핵심 개념 정리다음 정규식을 사용하면 입력받은 휴대폰 번호가 유효한지 간단하게 확인할 수 있습니다.\\d{10}일반적으로 유효한 휴대폰 번호는 10자리 숫자로 구성됩니다(인도 기준).메타 문자 \d는 0부터 9까지의 숫자 한 자리와 일치합니다.수량자 {n}은 앞의 표현식이 정확히 n번 반복됨을 의미합니다. 따라서 \d{10}은 숫자가 연속해서 10개 나열된 문자열과 일치합니다.예제 1: Pattern·Matcher 클래스 활용java.util.regex 패키지의 Pattern 클래스로 정규식을 컴파일하고, Matcher 객체를 통해
입력받은 문자열이 유효한 이메일 주소인지 확인하려면, 해당 문자열이 아래의 정규식 패턴과 일치하는지 검사하면 됩니다.^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$이 정규식의 각 구성 요소는 다음과 같은 의미를 가집니다.^ : 문자열의 시작 위치를 나타냅니다.[a-zA-Z0-9+_.-] : @ 기호 앞에서 영문 알파벳(대소문자 모두), 숫자, 그리고 +, _, ., - 중 하나의 문자와 일치합니다.+ : 바로 앞의 문자 집합이 한 번 이상 반복됨을 의미합니다.@ : @ 기호 자체와 일치합니다.[a-zA-Z0-9.-] :
정규식에서 메타 문자 \b는 단어의 경계(word boundary)를 의미하고, [a-zA-Z]는 영어 알파벳 한 글자(대문자와 소문자 모두 포함)와 일치합니다. 따라서 이 두 가지를 조합한 표현식 \b[a-zA-Z]는 모든 단어 경계 바로 뒤에 위치한 알파벳 한 글자, 즉 각 단어의 첫 글자와 일치하게 됩니다.구현 절차Java에서 각 단어의 첫 글자를 추출하려면 다음 단계를 따르면 됩니다.Pattern 클래스의 compile() 메서드를 사용하여 위 정규식을 컴파일합니다.Pattern 클래스의 matcher() 메서드에 입력 문자
Java에서 문자열에 포함된 각 영어 단어를 개별적으로 추출하려면 정규식 [a-zA-Z]+를 활용할 수 있습니다. 이 표현식은 영어 알파벳이 하나 이상 연속으로 나타나는 부분, 즉 단어 전체와 일치합니다.정규식을 사용해 입력 문자열에서 각 단어를 추출하는 절차는 다음과 같습니다.Pattern 클래스의 compile() 메서드를 사용하여 위 정규식을 컴파일합니다.Pattern 클래스의 matcher() 메서드에 대상 입력 문자열을 매개변수로 전달하여 Matcher 객체를 생성합니다.마지막으로 find() 메서드로 일치 항목을 찾고,
정규식에서 메타 문자 \s는 공백 문자와 일치하며, +는 앞의 패턴이 한 번 이상 반복됨을 의미합니다. 따라서 정규식 \s+는 하나 또는 여러 개로 이어진 공백 문자를 모두 매칭할 수 있습니다.즉, 문자열에 포함된 여러 개의 연속된 공백을 하나의 공백으로 바꾸려면, 입력 문자열을 \s+ 정규식과 매칭한 뒤 그 결과를 단일 공백 으로 치환하면 됩니다.예제 1 — Pattern과 Matcher 활용import java.util.Scanner; import java.util.regex.Matcher; import java.util.re
Java에서는 java.util.regex 패키지의 Pattern 클래스와 Matcher 클래스를 활용하면 문자열에 포함된 숫자를 간단하게 추출할 수 있습니다.주어진 문자열에서 숫자를 찾으려면 다음 두 가지 정규식 중 하나를 사용하면 됩니다.\\d+ 또는 ([0-9]+)\\d+ — 숫자(digit)가 하나 이상 연속으로 나타나는 패턴을 의미합니다.[0-9]+ — 0부터 9 사이의 문자가 하나 이상 연속되는 패턴으로, \\d+와 동일한 결과를 반환합니다.예제 1 — Scanner로 입력받은 문자열에서 숫자 추출하기import java
Java에서 정규식을 활용해 문자열을 검색할 때, 대소문자를 구분하지 않고 매칭하고 싶은 경우가 자주 있습니다. 예를 들어 test, TEST, Test를 모두 같은 단어로 인식해야 하는 상황이 그렇습니다. 이럴 때 Pattern 클래스의 CASE_INSENSITIVE 플래그를 사용하면 간단하게 해결할 수 있습니다.Pattern 클래스의 compile() 메서드 이해하기Pattern 클래스의 compile() 메서드는 두 가지 매개변수를 받을 수 있습니다.정규식 문자열: 매칭에 사용할 정규 표현식을 나타내는 문자열 값입니다.플래그
Java에서 정규식 메타 문자(^, $, [] 등)를 특별한 의미 없이 일반 문자 그대로 매칭해야 할 때가 있습니다. 이럴 때 Pattern 클래스의 LITERAL 필드를 활용하면 간단하게 해결할 수 있습니다.compile() 메서드의 매개변수Pattern 클래스의 compile() 메서드는 다음 두 가지 매개변수를 받습니다.정규식을 나타내는 문자열(String) 값Pattern 클래스에 정의된 필드 중 하나인 정수(int) 형태의 플래그 값Pattern.LITERAL 플래그란?LITERAL 필드를 사용하면 패턴이 리터럴(liter
POSIX 문자 클래스인 \p{ASCII}는 ASCII 문자와 일치하며, 메타 문자 ^(캐럿)는 부정(negation)의 역할을 합니다.즉, 다음 정규 표현식은 모든 비(非)ASCII 문자와 일치합니다.[^\p{ASCII}]String 클래스의 replaceAll() 메서드는 정규 표현식과 대체 문자열을 인수로 받아, 현재 문자열에서 해당 패턴과 일치하는 문자들을 지정한 대체 문자열로 교체합니다.따라서 replaceAll() 메서드를 사용해 일치하는 문자들을 빈 문자열( )로 교체하면, 비ASCII 문자를 손쉽게 제거할 수 있습니다
\p{Lower}는 자바 정규식에서 제공하는 POSIX 문자 클래스 중 하나로, 소문자 알파벳 a부터 z까지의 문자와 일치합니다. 입력값 검증이나 특정 패턴 추출 등 다양한 상황에서 유용하게 활용할 수 있으며, 대소문자를 구분해야 하는 로직을 간결하게 처리할 수 있다는 장점이 있습니다. 예제 1: 소문자로만 이루어진 문자열 걸러내기 다음 예제는 정규식 ^\p{Lower}+$을 사용하여 사용자가 입력한 5개의 문자열 중 오직 소문자로만 구성된 문자열만 골라 출력하는 프로그램입니다. import java.util.Scanner; imp
\p{Upper}는 Java 정규식에서 지원하는 POSIX 문자 클래스 중 하나로, 알파벳 대문자(A~Z)와 일치하는 패턴입니다. 이 클래스를 활용하면 문자열 전체가 대문자로만 구성되어 있는지 검사하거나, 문자열에 포함된 대문자의 개수를 손쉽게 계산할 수 있습니다. 예제 1: 대문자로만 이루어진 문자열 찾기 아래 예제는 정규식 ^\p{Upper}+$을 사용해 사용자가 입력한 5개의 문자열 중에서 오직 대문자로만 구성된 문자열을 골라냅니다. import java.util.Scanner; import java.util.regex.Mat
날짜 형식 검증은 사용자 입력을 처리할 때 자주 필요한 작업입니다. Java에서는 정규식(Regular Expression)을 활용하면 간단하게 날짜 문자열이 올바른 형식인지 확인할 수 있습니다.다음 정규식은 MM/dd/yyyy 형식의 날짜와 일치하는지 검사합니다.^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$정규식 구성 요소(1[0-2]|0[1-9]) : 월(Month) — 01부터 12까지의 두 자리 숫자만 허용합니다.(3[01]|[12][0-9]|0[1-9]) : 일(Day) — 0
자바(Java)에서 추상화(abstraction)는 추상 클래스(Abstract Class)와 인터페이스(Interface)를 통해 구현됩니다. 두 방식 모두 하위 클래스 또는 구현 클래스가 반드시 오버라이딩해야 하는 추상 메서드를 포함할 수 있다는 공통점이 있습니다. 하지만 문법적 제약과 설계 목적에서 중요한 차이가 존재합니다. 아래 표에서 추상 클래스와 인터페이스의 주요 차이점을 항목별로 비교해 보겠습니다.번호구분 기준추상 클래스 (Abstract Class)인터페이스 (Interface)1지원 메서드추상 메서드와 일반(구체)
Java에서 추상화(abstraction)는 크게 추상 클래스(Abstract Class)와 인터페이스(Interface)를 통해 구현됩니다. 추상 클래스는 구현부가 없는 추상 메서드를 선언할 수 있으며, 그 실제 구현은 이를 상속받는 자식 클래스가 담당합니다. 아래 표에서 추상 클래스와 구체 클래스(Concrete Class)의 주요 차이점을 한눈에 확인할 수 있습니다. 추상 클래스 vs 구체 클래스 주요 차이점 번호구분 기준추상 클래스 (Abstract Class)구체 클래스 (Concrete Class) 1지원 메서
자바에서 Scanner와 BufferedReader는 모두 외부 시스템으로부터 입력을 읽어오는 데 사용되는 대표적인 클래스입니다. 두 클래스는 비슷한 용도로 쓰이지만 내부 동작 방식과 성능 특성에서 뚜렷한 차이를 보입니다.일반적으로 Scanner는 입력값이 문자열이나 기본 타입(primitive type)이라는 것을 미리 알고 있을 때 편리하게 사용되며, BufferedReader는 문자 스트림(character stream)에서 텍스트를 읽을 때 버퍼링을 활용해 더 효율적으로 문자를 읽어오는 데 사용됩니다.Scanner와 Buff
생성자(Constructor)는 객체를 생성하고 초기화하기 위해 사용되는 특수한 메소드입니다. 반면 일반 메소드(Method)는 특정 문장이나 로직을 실행하는 역할을 담당합니다. 두 개념은 이름만 들으면 비슷해 보이지만, 용도와 동작 방식에서 뚜렷한 차이가 있습니다.아래 표는 자바에서 생성자와 메소드의 핵심적인 차이점을 정리한 것입니다.번호구분 기준생성자(Constructor)메소드(Method)1목적객체를 생성하고 초기화하는 데 사용됩니다.특정 문장이나 작업을 실행하는 데 사용됩니다.2호출 주체시스템에 의해 암묵적으로(자동으로)
클래스(Class)란?클래스는 개별 객체를 생성하기 위한 설계도(blueprint)입니다. 클래스 내부에는 다음과 같은 유형의 변수들을 포함할 수 있습니다.지역 변수(Local variables) – 메서드, 생성자 또는 블록 안에서 정의되는 변수입니다. 지역 변수는 해당 메서드 내에서 선언되고 초기화되며, 메서드의 실행이 끝나면 함께 소멸합니다.인스턴스 변수(Instance variables) – 클래스 내부에 있지만 어떤 메서드에도 속하지 않는 변수입니다. 인스턴스 변수는 클래스가 인스턴스화될 때 초기화되며, 해당 클래스의 모든
자바에서 메소드(method)란 특정 작업을 수행하기 위해 하나로 묶인 문장(statement)들의 집합을 의미합니다. 예를 들어 System.out.println() 메소드를 호출하면, 시스템은 실제로 여러 문장을 순서대로 실행하여 콘솔 화면에 메시지를 출력하게 됩니다.정적 메소드(Static Method)란?정적 메소드는 클래스 메소드(class method)라고도 불리며, 해당 클래스의 모든 객체가 공유하는 메소드입니다. 가장 큰 특징은 객체를 생성하지 않고도 클래스 이름만으로 직접 호출할 수 있다는 점입니다.비정적 메소드(N
변수는 프로그램이 조작할 수 있는 이름이 부여된 저장 공간을 의미합니다. Java에서 모든 변수는 특정 타입을 가지며, 이 타입은 해당 변수가 차지하는 메모리의 크기와 구조, 저장할 수 있는 값의 범위, 그리고 변수에 적용할 수 있는 연산의 종류를 결정합니다.정적 변수(Static Variable)정적 변수는 클래스 변수(class variable)라고도 불리며, 클래스의 모든 객체가 공유하는 변수입니다. 객체를 생성하지 않고도 클래스명.변수명 형태로 클래스 이름을 통해 직접 접근할 수 있다는 것이 특징입니다.비정적 변수(Non-S
ArrayList와 LinkedList는 모두 Java에서 List 인터페이스를 구현한 대표적인 컬렉션 클래스입니다. 두 클래스 모두 기본적으로 동기화되지 않아(non-synchronized) 단일 스레드 환경에 적합하지만, 내부 구조와 성능 특성에서 중요한 차이점을 보입니다. ArrayList와 LinkedList의 주요 차이점 번호구분ArrayListLinkedList 1 내부 구현 방식 내부적으로 동적 배열(dynamic array)을 사용하여 요소를 저장합니다. 이중 연결 리스트(doubly linked list)를