목표

수업목표이다. 이번수업에는 예외의 개념, 구조를 이해하고 Generic문법과 Wrapper객체에 대하여 배울 것이다.
오류&예외

오류와 예외의 차이점이다.
우선 오류는 일반적으로 회복이 불가능하다. 오류에 대처하는 법으로는 프로그램이 실행되고 어떠한 경우에 프로그램이 종료되었는지 로그를 체크해서 대응하는 방법이 있다.
예외는 일반적으로 회복이 가능한 문제이고, 컴파일에러와 런타임에러가 있다.
컴파일에러로는 간단히 문법이 틀리는 경우가 많기에 문법만 수정하면 간단하게 처리가 가능하다.
런타임에러는 문법적인 오류는 아니지만 프로그램이 실행도중 마주하는 오류를 뜻한다.
try-catch & Finally

예시로 가져온 try-catch와 Finally를 사용한 코드이다.
먼저 try{}에서 위험한 메서드를 실행해 볼 것이다. 만약에 위험 메서드로 지정했는데 try-catch를 사용하지 않으면 컴파일에러가 발생한다.
try로 실행을했다면 그 아래 catch()에서 오류를 잡아낸다. 그 후 미리 지정해 둔 오류메시지를 getMessage()를 통해 출력해 준다.
마지막 finally {}는 catch()에서 오류발생문장을 실행하던지 하지 않던지 무조건 실행되는 코드를 넣어준다.
요약하면 try로 문제가 발생할 수 있는 위험코드를 실행한 후 catch에서 문제가 발생하면 잡아주는 역할을 한다고 생각하면 된다.
Generic
Generic은 타입언어에서 중복되거나 필요 없는 코드를 줄여주는 것이다. 또한 타입안정성도 해치지 않는다는 게 Generic이다.
// 1.
public class Generic<T> {
// 2.
private T t;
// 3.
public T get() {
return this.t;
}
public void set(T t) {
this.t = t;
}
public static void main(String[] args) {
// 4.
Generic<String> stringGeneric = new Generic<>();
// 5.
stringGeneric.set("Hello World");
String tValueTurnOutWithString = stringGeneric.get();
System.out.println(tValueTurnOutWithString);
}
}
Generic의 기본문법이다.
< > 안에 T가 들어가는 이유는 컨벤션이고, 다른 단어나 문자가 들어가도 상관이 없다.
메인메서드에서 < > 안에 String형을 지정해 주었다. 이렇게 지정해 주면 위에 T형식으로 만든 t들은 모두 String형으로 사용할 수 있게 된다. 또한 static을 사용할 수 없다.
Java 컬렉션

과제


이번과제는 저번시간에 만든 계산기프로그램에 예외처리를 기능을 추가하는 것이다.

먼저 BadInputException.java를 확인해 보았다. 예외처리가 되어있었고, 예외상황발생 시 작성된 문자열과 함께 type까지 받아서 함께 출력해 주는 것을 확인하였다. 이 부분에서 숫자, 문자열 두경우가 생기겠다고 생각하고 시작하였다.

CalculatorApp.java를 확인해 보니 계산기를 실행하는 부분으로 확인됐고, 숫자와 연산자를 입력받아서 넘겨주는 것으로 생각되었다. 마지막에 true를 리턴해주는 것을 보니 true, false를 이용해서 입력받을 기간을 설정해야겠다고 생각됐다.

작성되어 있는 Parser.java의 내용을 확인하니 다음과 같았다.
과제 8번 부분을 보니 Pattern.matches라는 메서드를 사용하여 구현을 하는 것으로 생각이 들었다. 이를 사용하여 숫자를 입력받을 때는 NUMBER_REG와 비교를 해주고, 사칙연산(+,-,*,/)을 입력받을 때는 OPERATION_REG와 비교해 주면 된다는 것을 확인할 수 있다.

먼저 이 부분에 if문을 사용하여 사용자가 입력한 firstInput이 NUMBER_REG에 일치하는지 확인해 주는 구문을 작성하였다. 그 후 포함되지 않으면 예외처리를 사용하여 BadInputException에 정수값을 넘겨주고 아까 입력해 둔 문구를 출력하도록 하였다.
아랫부분은 this.calculator.setFirstNumber을 사용하여 인자값을 넘겨주고 마지막에 사용했던 부분을 리턴해주었다.

이 부분은 위의 첫 번째 적우를 받는 부분을 그대로 가져와서 사용하였고, 메서드 이름만 미리 지정해 둔 대로 First에서 Second로 바꿔주었다.

이 부분의 예외처리는 NUMBER_REG가 아닌 OPERATION_REG와 입력받은 사칙연산값을 비교하여 지정된 사칙연산이 들어오지 않으면 예외처리를 해주었다. 마찬가지로 BadInputException에 사칙 연산의 연산자라는 값을 넘겨주어 기존 문자열과 이 값이 합쳐져서 사용자에게 출력될 것이다.
또한 switch문으로 +, -, *, / 가 들어올 4가지 경우의 수를 지정하고 각 조건에 맞는 메서드들을 호출해 주었다.
이것도 마지막으로 사용 부분을 리턴해주고 종료하였다.

메인함수는 다음과같이 while문을 사용하여 calculateEnded가 true가 될 때까지 반복해 주었다.
try-catch를 사용하여 실행해 주었고, 예외상황발생 시 오류문구를 출력해 주도록 설정하였다.
정리
오늘 실습한 간단하지는 않았던 것 같다. 조건에 맞춰 코드를 제작하는 것은 검색을 해보고 배운 것을 떠올리며 할 수 있었지만, 선언 등 다양한 조건을 어느 클래스에 선언을 하는지 헷갈렸던 부분이 많았다. Java를 배운 지 1주일도 지나지 않았으니 헷갈리는 게 이상하지는 않다고 생각하고 넘어가려 한다.. 이번 Java 온라인강의가 종료되면 자바의 정석(기초 편)으로 다시 한번 꼼꼼히 Java를 공부할 예정이다. 모르고 넘어간 것은 있는지, 내가 틀리게 인지하고 있는 게 있는지 체크해 볼 예정이다. 그래도 슬슬 Java의 명령어들과 약어, 메서드 사용등의 기능이 손에 익고 있다는 게 느껴진다. 계속 반복학습하며 실력을 더 향상해서 복잡한 코딩도 자유롭게 할 수 있는 개발자가 되고 싶다.
'Back-End > JAVA' 카테고리의 다른 글
[JAVA] 자바의 정석(기초편) 공부 - CHAPTER 1 . 자바를 시작하기 전에 (0) | 2023.05.31 |
---|---|
[JAVA] 스파르타코딩클럽 JAVA공부(5) - 프로세스와 쓰레드, 우선순위 (0) | 2023.05.30 |
[JAVA] 스파르타코딩클럽 JAVA공부(3) - 객체지향의 이해와 상속 (0) | 2023.05.26 |
[JAVA] 스파르타코딩클럽 JAVA공부(2) - 조건문과 반복문, 배열관리 (0) | 2023.05.23 |
[JAVA] 스파르타코딩클럽 JAVA공부(1) - JAVA의 개념과 타입의 이해 (0) | 2023.05.22 |
남건욱's 공부기록