TIL

효준·2024년 10월 11일
0

10월 11일 금요일
AM 3주차 과제 해결 and 4주차 강의 수강
PM 4주차 강의 수강 및 특강 참여

아쉽게도 5주차 강의 수강을 완벽하게 하지 못했다.

💡 Today Issue

  • 3주차 과제 해결 도중 상속 부분에서 구분을 잘못해서 추상 클래스에서 부모 클래스를 상속했던 실수가 있었다.
  • Pattern.matchs() 메서드에 대해 알게 되었다.
  • switch문의 새로운 을 알게 되었다.

🤔 나의 생각 + 배운 것

  • 3주차부터는 조금씩 모르는 부분도 나오기 시작했기에 복습을 더 생각해가며 강의를 수강해야겠다.

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()는 정규 표현식으로 인자를 받아 동일한 패턴의 문자열인지를 확인하는 메서드이다.
  • switch는 Java14부터 개선된 switch문을 지원하는데 기존 switch문보다 가독성과 break문 누락으로 인한 오류를 보완하였다.
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 라벨(:)은 실행문이 여러 개일 때 중괄호를 사용하지 않아도 됩니다.

profile
사진은 캣타워가 생겨 포효하는 고양이입니다.

0개의 댓글

관련 채용 정보