Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

이지은님의 블로그

250105 - Java 제네릭과 정규 표현식의 활용 본문

TIL

250105 - Java 제네릭과 정규 표현식의 활용

queenriwon3 2025. 1. 5. 18:29

▷ 오늘 배운 것

오늘은 java종합반 4주차 제네릭내용을 정리하려고 한다.

 

1. 제네릭

2. 정규표현식

  1) Pattern 클래스

  2) 주요 Regex 문법

  3) Regex 문법 예제

 


 

 

1. 제네릭

제네릭은 클래스를 지정할때 타입을 유연하게 지정가능하고

클래스를 호출하면서 어떤 타입을 사용할 것인지 지정할 수 있다.

 

효율1: 타입 언어에서 중복되거나 필요없는 코드를 줄여주는 것

효율2: 타입 안정성을 해치지않음(Object를 대신 사용할 경우 타입안정성 침해)

 

제한1: 객체의 static 맴버에 사용할 수 없음

—> 타입변수는 인스턴스 변수로 간주, 모든 객체에 동일하게 동작해야하는 static필드 특성상 사용할 수 없음

제한2: 제네릭 배열 생성 불가

public class Generic<T> {
    private T t;

    public T get() { return this.t; }

    public void set(T t) { this.t = t; }

    public static void main(String[] args) {
        Generic<String> stringGeneric = new Generic<>();
        stringGeneric.set("Hello World");
				
        String tValueTurnOutWithString = stringGeneric.get();
        System.out.println(tValueTurnOutWithString);
    }
}

 

 

제네릭의 기능
  • 다수의 타입변수 지정가능
  • 상속과 타입의 관계가 그대로 적용됨
  • 제네릭의 제한을 정할 수 있음
    • <? extends T> : T 자식들만 사용가능
    • <? super T> : T와 그 부모들만 사용가능
    • <?> : 제한 없음
  • 메서드를 스코프로 제네릭을 별도 선언가능
// 스코프로 제네릭을 사용할 수 있음
public static <T extends Comparable<? super T>> void sort(List<T> list)

static <T> void sort(List<T> list, Comparator<? super T> c) {}

 

  • 반환 타입앞에 제네릭사용
  • 해당 메서드에서만 적용되는 제네릭 타입 변수를 선언가능
    • Static: 제네릭 메소드의 제네릭 타입 변수는 해당 메소드에만 적용되기 때문에 메소드 하나를 기준으로 선언하고 사용가능
public class Generic<T, U, E> {
		// Generic<T,U,E> 의 T와 아래의 T는 이름만 같을뿐 다른 변수
    static <T> void sort(List<T> list, Comparator<? super T> c) { ... }
}

 

 

 

 

2. 정규 표현식

정규 표현식이란특정한 규칙을 가진 문자열의 집합을 표현하는데 쓰이는 형식 언어

 

1) Pattern 클래스

Pattern p = Pattern.compile("a...b");
Matcher m = p.matcher("aaaab");
boolean b = m.matches(); // true

Pattern.compile() : 정규 표현식의 패턴을 컴파일 하여 Pattern형태로 저장한다.

matcher() : 비교하고 싶은 문자열과 비교할 수 있다.

matches(): 참거짓을 출력할 수 있다.

 

이를 한줄로 표현할 수 있는데...

boolean b = Pattern.matches("a...b", "aaaab"); // true

 

 

특정 문자를 포함하는지 검사하는 또 다른 메서드로 .contains()가 있다.

.contains()와 .matches()의 차이점은
.contains()는 인자로 전달 받은 특정 문자의 포함 여부를 확인하는 메서드인 반면에,
.matches()는 정규 표현식으로 인자를 받아 동일한 패턴의 문자열인지를 확인하는 메서드이다.

 

 

2) 주요 Regex 문법

Regex Syntax 의미 예제 일치  불일치 
. 임의의 단일 문자(1번 나타남) go.gle google, goggle gogle
? 0 또는 1번 나타남 demos?123 demo123, demos123 demoA123
[abc] 해당 문자 하나 analy[z]se analyse, analyze analyxe
[a-z] 알파벳 소문자 하나 demo[2-4] demo2, demo3 demo5
[^abc] 해당 문자 모든 문자 analy[^z]se
[^A-C]D
analyxe
DD
analyse, analyze
AD, D, DDD
() 문자를 하나로 묶음 (ab)+
abababab
ba
^ 특정 문자열로 시작 ^demo demos, demonstration my demo
$ 특정 문자열로 끝남 demo$ my demo demonstration
* 0 이상 나타남 (탐욕적 매칭) goo*gle (o 0 이상) gogle(o 0)
gooogle(o 2)
gggle
+ 1 이상 나타남 (탐욕적 매칭) goo+gle (o 1 이상) google(o 1)
goooogle(o 3)
gogle(o 0)
{n,m} 최소 n, 최대 m a{4,7} aaaa, aaaaa, aaaaaa aaa, aaaaaaa
\ 이스케이프 AU\$10 AU$10 AU10, 10
\s 공백 문자 \s 공백, , 개행 공백이 아닌 문자
\S 공백 문자가 아닌 것 \S    
\d 숫자(0-9) \d 0, 1, 9 알파벳, 공백
\D 숫자가 아닌 것 \D    
\d 단어문자 \d    
\W -단어 문자(문장 부호 ) \W !, @, # 알파벳, 숫자

 

 

 

3) Regex 문법 예제

1. ^[a-zA-Z]$

: 문자만 존재하는지 확인할 때(^:특정문자열로 시작, $:특정문자열로 끝남)

 

2. [+\\-*/]

  • []: 대괄호는 문자셋을 의미. 해당 문자들 하나를 매칭.
  • + : 더하기 연산자.
  • \\- :빼기 연산자. - 문자셋 안에서 특별한 의미(범위 지정) 가지므로 \ 이스케이프 처리.
    • 정규식에서 - 자체를 사용하려면 이스케이프 처리(\-)
    • 자바 문자열에서는 \자체를 이스케이프해야하므로 \\-
    • 하지만 맨끝 또는 맨앞에서 사용되거나 특수 문자로 인식되는 경우, 단순히 -라는 문자로 사용가능(([a-z0-9._%+-])
  • * : 곱하기 연산자
  • / : 나누기 연산자

3. ^[0-9]*$

  • ^ : 문자열 시작
  • [0-9] : 숫자 0부터 9까지의 범위
  • * : 0개 이상의 숫자를 매칭(0개여도 매칭가능)
  • + : 1개 이상의 숫자를 허용
  • $ : 문자열 종료

 

4. 메일 주소 검사: [a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}

5. 특정 시작 문자 탐색:

(예) ^hello : hello로 시작하는 모든 문자열 매칭.

6. 숫자만 포함된 문자열 검사: ^\d+$

 

 

 

 

▷ 앞으로

이렇게 4주차 내용정리는 마무리 했다. 정규식과 제네릭 모두 계산기 도전과제에 사용할 것이기 때문에 예제문제를 많이 살펴보면서 기능을 익혀야 될 것 같다고 느꼈다.

 

 

▷ 참고블로그

https://velog.io/@kai6666/Java-%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D%EA%B3%BC-Pattern%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%B0%8F-%EB%A9%94%EC%84%9C%EB%93%9C

 

[Java] 정규 표현식과 Pattern클래스 및 .matches() 메서드

정규 표현식이란, 특정한 규칙을 가진 문자열의 집합을 표현하는데 쓰이는 형식 언어이다. 정규 표현식을 사용하면 수많은 문자들 사이 전화번호 형식의 문자를 찾을 수도 있고, 찾은 문자열을

velog.io

 

https://girawhale.tistory.com/77

 

[Java] Pattern, Matcher Class 사용법과 메소드 정리

자바에서는 정규식을 활용해 문자열을 검증, 탐색을 돕는 Pattern, Matcher 클래스를 제공해준다. 다음에도 쉽게 활용할 수 있도록 정리하려고 한다. 👨‍🏫 클래스 분석 Pattern 정규 표현식이 컴파

girawhale.tistory.com

https://hijuworld.tistory.com/58

 

JAVA 정규식을 사용하여 패턴 매칭(Regex, Pattern, Matcher)

정규 표현식이라는 표현식을 이용하여 패턴이 매칭하는지 검사 할 수 있다. 예를들어 어떤 문자열이 A부터 C사이에 글자로 시작하면서 5글자이내의 글자인지를 검사하거나 해당 문자열이 숫자

hijuworld.tistory.com

 

 

Class pattern 공식 문서

https://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

 

Pattern (Java Platform SE 6)

In Perl, \1 through \9 are always interpreted as back references; a backslash-escaped number greater than 9 is treated as a back reference if at least that many subexpressions exist, otherwise it is interpreted, if possible, as an octal escape. In this cla

docs.oracle.com