오늘은 오브젝트 클래스와 예외에 대해서 공부할 것이다.
오브젝트 클래스는 쉽게 이해가 가능하지만
Exception은 좀 어려울 수도 있다. 하지만 앞으로
많이 쓰일 개념이라 어떤 것인지만 알고 넘어가도 된다.
목차
1. Object class
1. toString()
2. equals(Object obj)
3. getClass()
4. hashCode()
5. wait(), notify(), notifyAll() : 이건 Thread 수업에서 소개.
6. Object class를 사용하는 대표적인 예
2. Getter & Setter
3. Exception
1. 0으로 나눗셈하는 경우
2. 배열의 인덱스 번호 사용 오류
3. Null값을 참조변수로 쓸 때
4. 잘못된 데이터 입력
5. 숫자로 바꿀 수 없는 데이터를 바꾸려할 때
6. 다중 catch문과 Exception 부모 클래스 사용
7. finally
8. Exception의 종류
9. throw
1. Object class
Object class은 모든 Java class의 최상위 class이다.
이게 무슨말이냐면
어떤 클래스를 만들든
자동으로 Object class를 상속하게 된다.
그래서 간단한 멤버변수 하나만 있는 클래스도
객체를 생성해서 .을 찍어보면 여러 기능이 나온다. (ex. toString()....)
이렇게 간단한 클래스를 만들었다고 가정하자.
상속을 한다고 extends를 적지 않아도
자동으로 최상위 클래스인 오브젝트 클래스를
이 클래스는 상속받게 된다.
그렇기 때문에
오브젝트 클래스가 가진 메소드들을
바로 사용할 수 있다.
그 기능들 중 주요 기능을 알아볼 것이다.
1. toString()
2. equals(Object obj)
3. hashCode()
4. getClass()
5. wait(), notify(), notifyAll() : 이건 Thread 수업에서 소개.
1. toString()
toString()은 객체에 대한 정보나 값들을 문자열로 리턴해주는 기능메소드이다.
특정 문자열의 toString()을 출력해 보면
이렇게 생긴
결과가 출력이 된다.
이는 [ 클래스명@자바에서 메모리의 주소 ]를
표현한 것이다.
또한
다른 여러 자바 클래스들도 toString()을 보유하고 있다.
그러나 그중에는
원래의 toString() 기능으로 동작하지 않는 것이 있다.(주소기능)
대표적인 예가 String (문자열) 객체인데
결과를 출력하면 내가 입력한 문자열이 출력된다.
이는 즉, 오버라이드 기능을 사용해서
기능을 개선했다는 것이다.
그리고 이 말은
내가 만든 클래스에서
toString()을 오버라이드하면
원하는 기능으로 개선할 수도 있다는 뜻이다.
2. equals(Object obj)
equals()는 같은 객체인지를 확인하는 메소드이다.
같은 객체이냐의 여부를
true /false로 리턴하기에
boolean과 함께 쓰인다.
하지만 같은 객체인지를 판별할 땐
이 메소드를 잘 사용하지 않는다.
그 이유는 참조변수의 주소값끼리 비교 연산이 가능하기 때문이다.
그리고 equals( ) 역시
오버라이드가 가능하며
오버라이드가 된 대표적인 클래스가 String이다.
문자열 참조변수를 연산자인
'=='를 사용해서
비교하면 주소값을 비교하는 것이다.
그러나
equlas()를 사용해서
비교하면 값을 비교할 수 있다.
이 개념은 개발자로 살아가면서
엄청 중요한 개념이니 꼭 기억하자!
3. getClass()
getClass는 말 그대로
클래스의 정보를 가진 Class객체를 리턴해주는 메소드이다.
이를 통해 클래스명이 뭐지, 패키지명이 뭔지 등을
알 수 있다.
4. hashCode()
hashCode()는 자바에서의 주소값을 가져오는 메소드이다.
toString() 기능을 사용할 때
주소값이 출력되는 경우를 앞에서 말했는데
이렇게 @뒤에 있는 값이
주소값이다.
5. wait(), notify(), notifyAll() : 이건 Thread 수업에서 소개.
이 친구들은 후에 소개하겠다.
6. Object class를 사용하는 대표적인 예
Object class는 모든 클래스의 최상위 부모 클래스여서
어떤 클래스의 객체든 모두 참조할 수 있다.
이게 무슨 소리냐고?
모르겠다면 접은 글을 펴서 업캐스팅을 참고하고 오자!
다시 돌아와서
object class를 사용하는 대표적인 상황을 보자면
위의 사진처럼
내가 만든 모든 클래스들을 참조할 수 있다.(업캐스팅)
또 이런 업캐스팅은 파라미터나 리턴에도 사용이 가능하다.
2. Getter & Setter
지금까지 클래스를 만들었을 때
멤버변수들은 private를 써서 만드는 것을 권장한다고 했다.
그래서 따로 멤버변수의 값을 출력하거나
입력할 수 있는 메소드가 필요했다.
물론 생성자로도 입력할 수 있겠지만
하나하나의 값을 조절이 필요한 경우도 있으니 말이다.
위의 사진처럼
멤버변수 하나하나의 값을 별로도 설정하는 기능메소드를
setter라고 부르며
멤버변수 하나하나의 값을 리턴해주는 기능메소드를
getter라고 부른다.
물론 멤버변수가 적으면 다 작성이 가능하겠지만
멤버변수가 100개면 그러기 어렵다.
이클립스는 이때 편한 기능을 제공해 준다.
마우스 오른쪽 버튼을 눌러서
Source - Generate Getters and Setters를
누르면 자동으로 모든 멤버변수의
getter와 setter가 생성된다.
3. Exception
예외(Exception)란 사용자가의 잘못된 조작이나 개발자의 코딩 실수로 인해
발생하는 프로그램 오류를 말한다.
예외가 발생하면 프로그램은 곧바로 종료된다는 점에서 에러와 동일하지만
예외는 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가
유지되도록 할 수 있다.
위에서 말한 것처럼
에러가 발생하면 실행이 불가하지만
예외가 발생하면 실행 중 문제가 발생한다.(앱 사용 중에 다운이 된다.)
예외의 대표적인 예는 아래의 3가지 경우이다.
1) 사용자가 잘못된 데이터를 입력하는 경우 (int형에다 문자입력 등)
2) 개발 로직이나 계산을 잘못한 경우 (배열 인덱스번호 오휴, 0으로 나누기)
3) 네트워크나 하드웨어 오류 (URL실수, 서버 불량 등)
이런 상황에서 예외는 발생하지만 앱이 다운되지 않도록
예외처리를 하는 방법에 대해 알아보자.
1. 0으로 나눗셈하는 경우
우선 0으로 나눗셈하는 경우다.
0으로 나눗셈을 하면 예외가 발생하기 때문에
해당 코드가 작성되어 있는 부분을
try / catch문을 작성해서
예외처리를 해줘야 한다.
이때 예외 클래스에는
ArithmeticException를 써줘야 한다.
위의 사진과 같이
try catch문을 적어줘야 작동이 가능하며
catch 부분에 적힌 것은
예외처리될 때 작동할 코드다.
2. 배열의 인덱스 번호 사용 오류
배열의 인덱스 번호를 잘못 입력한 경우에는
예외 클래스를
ArrayIndexOutOfBoundsException를 적어야 한다.
한 가지 팁을 주자면 앞에 조금 적고
컨트롤 스페이스를 누르면 목록이 나타나는데
맞게 찾아서 엔터를 누르면 빨리 입력가능하다.
3. Null값을 참조변수로 쓸 때
값이 null인 참조변수를 사용할 때도
예외상황이 발생하는데
이때 사용하는 예외 클래스는
NullPointerException이다.
(빈번하게 사용됨!!)
4. 잘못된 데이터 입력

위의 사진처럼
int형을 입력받아야 하나
문자를 받는 등 잘못된 데이터를 입력받아도
예외상황이 발생한다.
이때 예외클래스는
InputMismatchException이다.
5. 숫자로 바꿀 수 없는 데이터를 바꾸려 할 때

그리고 숫자로 바꿀 수 없는 데이터(문자열 등)를
숫자로 바꾸려고 할 때도
이 상황이 발생한다.
이때 예외클래스는
NumberFormatException이다.
6. 다중 catch문과 Exception 부모 클래스 사용

이 외에도 여러 예외상황이 있다.
그리고 만약
한 상황에서 여러 예외상황이 발생할 수 있다면
중첩문을 통해서 해결할 수 있다.
그러나 저렇게 중첩문으로 적는 것은
코드가 더럽고 짜증 나서
이런 방식으로 catch를 여러 번 작성도 가능하다.
또한 다중 catch문도 개수가 많아지면 짜증이 나니
예외클래스들의 부모클래스인 Exception 클래스를 사용해서
한 번에 해결할 수도 있다.
그러나 각 상황별로 어떤 예외 상황인지
따로 코딩을 하기 힘들다는 단점이 있다.
7. finally
finally 도 try catch 문에 사용이 가능한데
예외가 발생하든 아니든 상관없이
실행되야 하는 코드가 있을 때 쓴다.
또는 catch문을 생략할 때 사용한다.
8. Exception의 종류
Exception의 종류는 크게 2가지다.
1. Checked Exception
2. UnChecked Exception
이 있다.
url이나 파일을 입출력할 때
발생하는 예외들이 대표적인 예이며
앞으로 공부하면서 제대로 알아보자.
9. throw
마지막으로 throw라는
예외 처리를 떠넘기는 문법이다.
method2 클래스에서
예외 클래스를 떠넘겼다.(throws ~~~~~)
이런 상황에서
method2를 사용하기 위해선
반드시 try문 안에서 호출되어야 한다.
그리고 사진을 보면 떠넘겨진 예외 처리를
method2 호출 아래에 있는
catch 문을 통해 처리해주고 있다.
'# 개발 > Java' 카테고리의 다른 글
Java #11 - Thread, runnable, 익명클래스, 동기화 (국비23일차) (0) | 2023.02.02 |
---|---|
Java #10 -Generic, Collection API (국비22일차) (0) | 2023.02.01 |
Java #8 - 다형성(polymorphism), 추상(abstract), 인터페이스 (국비20일차) (0) | 2023.01.30 |
Java #7 - 상속, 오버라이드, Final (국비19일차) (0) | 2023.01.27 |
Java #6 - 생성자, Static, 이너클래스, 지역클래스 (국비18일차) (0) | 2023.01.26 |