10 예외처리
10-1 예외 클래스
- 예외 : 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
- 예외 처리를 통해 프로그램을 종류하지 않고 정상 실행 상태가 유지되도록 할 수 있다
예외와 예외 클래스
- 일반 예외는 프로그램 실행 시 예외가 발생할 가능성이 높기 때문에 자바 소스를 컴파일하는 과정에서 해당 예외 처리 코드가 있는지 검사
- 실행 예외는 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일 하는 과정에서 예외처리 코드가 있는지 검사하지 않는다
- RuntimeException 클래스의 하위클래스이면 실행 예외 클래스이고, 하위 클래스가 아니면 예외 클래스이다
실행 예외
- NullPointerException : 객체 참조가 없는 상태, null값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생
- ArrayIndexOutOfBoundException : 배열에서 인덱스 범위를 초과할 경우 발생
- ClassCastException : 타입 변환을 할 수 없는 관계인데 타입변환을 시도할 경우 발생(상, 하위 클래스, 인터페이스와 구현클래스 등의 관계가 아닐 경우)
10-2 예외 처리
예외 처리 코드
- try-cathch-finally 블록 : 생성자 내부, 메소드 내부에서 작성되어 일반 예외와 실행예외가 발생할 경우 예외 처리를 할 수 있도록 한다
예외 종류에 따른 처리 코드
- 다중 catch : try 블록 내부에서 다양한 예외가 발생할 경우 예외별로 예외 처리 코드를 다르게 하는것
- catch 순서 : 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다
예외 떠넘기기
- 예외가 발생할 수 있는 코드를 작성할때 try-catch 블록으로 처리하는것이 기본이지만 경우에 따라서는 호출한 곳으로 떠넘기는데 이때 throws 키워드를 사용한다
리턴타입 메소드(매개변수, ...) throws 예외클래스1, 예외클래스2, … { }
11 기본 API 클래스
11-1 java.lang 패키지
자바 API 도큐먼트
- API는 라이브러리라고 부르기도 하며, 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음
Object 클래스
- 자바의 모든 클래스는 Object 믈래스의 자식 혹은 자손 클래스이다
객체 비교(equals())
public boolean equals(Objcet obj){…}
- 매개타입이 Object인데 모든 객체가 매개값으로 대입될 수 있음을 말한다
- Object 클래스의 equals() 메소드는 '=='연산자와 같은 결과를 리턴한다
객체 해시코드(hashCode())
- 객체를 식별하는 하나의 정수값
- 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하므로 객체마다 다른 값을 가진다
객체 문자 정보(toString())
- 객체의 문자 정보를 리턴
- 객체의 문자 정보 : 객체를 문자열로 표현한 값, '클래스이름@16진수해시코드'
System 클래스
- 운영체제의 일부 기능을 이용할 수 있는 클래스
- 프로그램 종류, 키보드로부터 입려, 모니터로 출력, 현재시간 읽기 등
- 모든 필드와 메소드가 정적필드, 정적메소드로 구성
프로그램 종료(exit())
- 강제적으로 JVM을 종류시킬 때 호출
- int 매개값을 지정하도록 되어 있는데 이를 종류 상태값이라고 하고, 일반적으로 정상 종료일 경우 0 값을 준다
현재 시각 읽기(currentTimeMills(), nanoTime())
- 컴퓨터의 시계로부터 현재 시간을 긹어서 밀리세컨드(1/1000초) 또는 나노세컨드(1/1000000000초) 단위의 logn 값을 리턴한다
Class 클래스
- 자바 클래스와 인터페이스의 메타 데이터를 Class 클래스로 관리한다
- 메타 데이터는 클래스의 이름, 생성자 정보, 필드정보, 메소드 정보를 말한다
Class 객체 얻기(getClass(), forName())
- 클래스로부터 얻는 방법
Class clazz = 클래스 이름.class
Class clazz = Class.forName("패키지 ... 클래스 이름")
- 객체로 부터 얻는 방법
Class clazz = 참조변수.getClass();
클래스 경로를 활용해서 리소스 절대 경로 얻기
String photo1Path = clazz.getResource("photo1.jpg").getPath();
String photo2Path = clazz.getResource("images/photo2.jpg").getPath();
String 클래스
String 생성자
- 소스상에서 문자열 리터럴은 String 객체로 자동 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 STring 객체를 생성할 수도 있다
// 배열 전체를 String 객체로 생성
String str - new String(byte[] bytes);
// 지정한 문자셋으로 디코딩
String str - new String(byte[] bytes, String charsetName);
// 배열의 offset 인덱스 위치부터 length만큼 String 객체로 생성
String str - new String(byte[] bytes, int offset, int length);
// 지정한 문자셋으로 디코딩
String str = new String(byte[] btes, int offset, int length, String charsetName);
String 메소드
- 문자 추출(charAt()) : 매개값으로 주어진 인덱스의 문자를 리턴
- 문자열 비교(equals()) : '=='연산자로 문자열을 비교할 경우 원하지 않는 결과가 나올 수 있으므로 문자열을 비교할 때에는 equals를 사용한다
- 바이트 배열로 변환(getBytes()) : 문자열을 바이트 배열로 변환
byte[] bytes = "문자열".getBytes();
byte[] bytes = "문자열".getBytes(Charset charset);
- 문자열 찾기(indexOf()) : 매개값으로 주어진 문자열이 시작되는 인덱스 리턴
- 문자열 길이(length()) : 문자열의 길이(문자의 수)를 리턴
- 문자열 대치(replace()) : 첫번째 매개값인 문자열을 찾아 두번째 매개값인 문자열로 대체한 문자열을 생성하고 리턴
- 문자열 잘라내기(substring()) : 주어진 인텍스에서 문자열을 추출, 매개값이 숫자 두 개인 경우 주어진 시작과 끝 인덱스 사이의 문자열 추출, 하나만 주어진 경우 주어진 인덱스부터 끝까지 문자열 추출
- 알파벳 소, 대문자 변경(toLowerCase(), toUpperCase()) : 주어진 문자열을 모두 소문자 또는 모두 대문자로 바꾼 새로운 문자열 리턴
- 문자열 앞뒤 고액 잘라내기(trim()) : 문자열 앞 뒤의 공백 제거 후 리턴
- 문자열 변환(valueOf()) : 기본타입의 값을 문자열로 변환
Wrapper(포장) 클래스
- 자바는 기본 타입의 값을 갖는 객체를 생성할 수 있는데 이런 객체를 포장객체라고 한다.
박싱(Boxing)과 언박싱(Unboxing)
- 기본 타입의 값을 포장 객체로 만드는 과정을 박싱, 반대로 포장 객체에서 기본타입의 값을 얻어내는 과정을 언박싱이라 한다
자동 박싱과 언박싱
- 자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우 발생
- 자동 언박싱은 기본 타입에 포장 객체가 대입되는 경우와 연산에서 발생
문자열을 기본 타입 값으로 변환
- 대부분 포장 클래스에는 'parse + 기본타입 이름'으로 되어 있는 정적 메소드가 있다. 정적 메소드는 문자열을 매개값으로 받아 기본타입 값으로 변환한다
포장 값 비교
- 포장 개게에 정확히 어떤 값이 저장될지 모르는 상황이라면 직접 내부 값을 언박싱해서 빅하거나, equals() 메소드로 내부 값을 비교하는 것이 좋다
Math 클래스
- 수학 계산에 사용할 수 있는 메소드를 제공하고 있다.
- Math 클래스가 제공하는 메소드는 모두 정적 메소드이므로 Math클래스로 바로 사용가능하다
11-2 java.util 패키지
Date 클래스
- 날짜를 표현하는 클래스
DAte now = new Dte();
- SimpleDateFormat을 이용하여 원하는 나라 형식의 문자열을 생성할 수 있다
SimpleDateFormat sdf = new SimpleDateFormat("yyy년 MM월 dd일 hh시 mm분 ss초");
- format() 메소드를 호출해서 원하는 형식의 날짜 정보를 얻을 수 있다. 매개갑은 Date객체
String strNow = sdf.format(now);
Calendar 클래스
- Calender 클래스는 달력을 표현한 클래스로 추상클래스이다
과제
- 기본과제
10-2 확인문제 2번 풀고 과정 설명하기
정답 : 4번
|
throws는 예외가 발생할 수 있는 코드를 작성할 때 try-catch 블록으로 처리하는것이 일반적이지만 경우에 따라 호출한 곳으로 떠넘기는데, 이때 사용한다
throws의 사용법은 아래와 같다
리턴타입 메소드(매개변수, ...) throws 예외클래스1, 예외클래스2, … { }
사용방법을 살펴보면 throws 키워드 뒤에 예외클래스를 쉼표로 구분해서 기술하도록 되어있다
모든 예외를 떠넘길때에는 throws Excetion으로 작성하여 사용할 수 있다
throws 키워드는 예외를 떠넘길때 사용하는 키워드이지 예외를 발생시키는 것이 아니므로 정답은 4번이다
|