문시해알, 맞왜틀 TIL - 20230526
오늘은 계산기 프로그램을 만드는 예제를 진행했다. 이번 예제에서는 문제점이라기 보다는 궁금했던걸 작성하겠다.
예제설명
말 그대로 피연산자와 연산자를 입력하면 사칙연산을 이용하여 계산 후 출력해주는 프로그램을 실습했다.
1. **구현 1, 구현2** 로 주석처리된 부분을 직접 구현해주세요
2. 추가된 BadInputException은 우리가 이번 과제에서 사용할 예외 입니다.
3. 추가된 CalculatorApp은 우리의 계산기를 실행시켜주는 클래스 입니다.
4. Parser는 유저의 입력을 받아서 우리가 지난주에 구현한 계산기의 로직으로 전환시켜주는 객체 입니다.
5. 우리는 주로 Parser를 구현할 예정 입니다.
6. 우리는 유저의 입력을 String으로만 받아야 합니다.
7. 입력받은 String을 숫자나 연산자로 변환하기 위해서 꼭! 예외처리를 해야합니다.
8. 해당 예외처리를 하기 위해서는 Pattern.match() 메서드가 필요합니다. 해당 부분은 검색하면 알 수 있습니다.
9. Pattern.match()메서드를 사용하기 위한 정규식 표현은 코드내에 제공되어 있습니다.
10. 예외는 이미 구현된 BadInputException 객체를 사용합니다.
11. 에외를 어디에 구현 할 지는 본인이 결정 할 수 있습니다. 어디가 더 좋을지 고민해보고 좋은 위치에 구현하고 간단하게 주석으로 자기의 생각을 표현해주세요
설명과 같이 유저의 입력은 String으로만 받기 때문에 예외처리도 진행해야 하는 실습이였다.
오늘의 문제점? 궁금점?은 예제 설명9번에 보면 Pattern.match()메서드를 어디선가 본거같긴한데 오랜만에 만나서
생각이 나지않았다..😡 원래 오랜만에 만나면 반가워야하는데...😥 아무튼 Pattern.match()메서드를 사용하면서
궁금했던 점을 가지고 나왔다. 자세한 내용은 문제점 챕터에서~~
문제점 and 궁금한걸 시도해본 점
예제를 진행하던 중 피연산자와 연산자의 예외처리 부분에서 Pattern.match()메서드를 마주치게 됬다.
간단하게 코드를 설명하면 정규화를 통해 아래의 코드와 같이 피연산자 부분에 숫자가 아닌 다른 값이 들어오면
정수값을 입력해 달라는 예제 코드를 볼 수 있다.
public Parser parseSecondNum(String secondInput) throws Exception{
if(!Pattern.matches(NUMBER_REG, secondInput)) {
throw new BadInputException("정수값");
}
이 부분에서 Pattern.match()메서드가 나오는데 Pattern.match()메서드 ( )안에 2개의 매개변수가 들어가 있는데
저 Pattern.match()메서드가 매개변수의 두 값을 비교해주는 메서드이다 보니까 특징에 대해서 생각하기도 전에
순서를 바꾸게 되면 어떻게 될까라는 의문점을 가지고 있었다. 그냥 값만 같은 값이 들어오는지 다른 값이 들어오는지
비교만 해주면 되는거 아닌가 하고 바꿔봤지만 결과는 오류!! 프로그램이 돌아가지 않았다ㅡㅡ🤬
해결방안
Pattern.match()메서드에 매개변수 값을 입력할 때 순서를 다르게 넣어주면 실행되지 않는걸 확인 할 수 있었다.
그래서 Pattern.match()메서드와 매개변수 입력값 순서에 대해 알아보고자 TIL을 작성하였다.
알게된 점
📖 Pattern 클래스
● 정규 표현식에 대상 문자열을 검증하는 기능은 java.util.rege.Pattern 클래스의 matches()메소드를 활용하여 검증할 수 있다.
● matches() 메서드의 첫번째 매개값은 정규표현식이고 두번째 매개값은 검증 대상 문자열입니다.
- 이 부분이 바로 나의 궁금증을 유발했던 포인트라고 할 수 있다. 왜 순서를 바꾸면 오류가 뜨는지 알게 되었다!!
● 검증 후 대상문자열이 정규표현식과 일치하면 true, 그렇지 않다면 false값을 리턴한다.
📖 Pattern 클래스 주요 메서드
● compile(String regex) : 주어진 정규표현식으로부터 패턴을 만드는 메서드
● matcher(CharSequence input) : 대상 문자열이 패턴과 일치할 경우 true를 반환하는 메서드
● asPredicate() : 문자열을 일치시키는 데 사용할 수있는 술어를 작성하는 메서드
● pattern() : 컴파일된 정규표현식을 String 형태로 반환하는 메서드
● split(CharSequence input) : 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리하는 메서드
다음과 같이 여러가지 메서드에 대해 알게 되었고 첫번째 매개변수 값으로는 정규 표현식이,
두번째는 검증 대상 문자열이 들어가는걸 알게되었다. 다음에도 궁금한 내용이 있다면 TIL에 정리할 예정이다!!