10월 11일 금요일
AM 3주차 과제 해결 and 4주차 강의 수강
PM 4주차 강의 수강 및 특강 참여
아쉽게도 5주차 강의 수강을 완벽하게 하지 못했다.
Pattern class
pattern 클래스는 정규표현식이 컴파일된 클래스이다. 정규표현식이란?
private static final String OPERATION_REG = "[+\\-*/]"; private static final String NUMBER_REG = "^[0-9]*$";
이와 같이 [+\-*/] , ^[0-9]*$ 특정한 규칙을 가진 문자열의 집합을 표현하는데 쓰이는 형식 언어이다.
컴파일과 비교를 한 번에 해주는 것이 matches() 메서드다.boolean b = Pattern.matches("a...b", "aaaab"); // true
이와 같이 반환 타입은 boolean이며 매개변수는 정규표현식과 비교를 원하는 문자열을 넣으면 된다.
또한 특정 문자를 포함하는지 검사하는 다른 메서드로는 contains()가 있다.
- contains()는 인자로 전달 받은 특정 문자의 포함 여부를 확인한다.
- matches()는 정규 표현식으로 인자를 받아 동일한 패턴의 문자열인지를 확인하는 메서드이다.
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
기존의 switch 문에서는
switch (day) {
case Monday :
case Sunday :
case Friday :
System.out.println(6);
break;
case Tuesday : System.out.println(7);
break;
case Thursday :
case Saturday : System.out.println(8);
break;
case Wednesday : System.out.println(9);
break;
}
이와 같이 가독성이 좋치 않은데 개선된 switch문에서는
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
이와 같이 case 변수명 : 에서 : 를 -> 로 변경하여 사용하면 된다. 하지만 이때 실행문이 여러 개일때는 중괄호로 묶어줘야한다.
int numLetters;
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
numLetters = 6;
break;
case TUESDAY:
numLetters = 7;
break;
case THURSDAY:
case SATURDAY:
numLetters = 8;
break;
case WEDNESDAY:
numLetters = 9;
break;
default:
numLetters = -1;
}
이전의 switch문
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
개선된 switch문
마지막으로 yield 예약어가 있는데
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> {
System.out.print("Six ");
yield 6;
}
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
yield는 키워드가 아니라 제한된 식별자(restricted identifier)이기 때문에 var처럼 식별자로 사용할 수 있습니다.
방금 전에 본 switch 연산식에서 길이를 return하기 전에 특정 메시지를 출력하고 싶으면 위와 같이 사용하면 됩니다.
yield 예약어는 case 라벨(:)에도 사용 가능합니다.
case 라벨(:)은 실행문이 여러 개일 때 중괄호를 사용하지 않아도 됩니다.