Chapter 10, 11 (예외처리, 기본 API 클래스)
Chapter 10 예외 처리
자바 프로그래밍에서 예외 처리는 매우 중요한 구성 요소 입니다. 예외는 프로그램 실행 중 발생할 수 있는 비정상적인 상황을 나타내며, 이를 효과적으로 처리하는 방법은 안정적인 소프트웨어를 만드는 데 필수적입니다.
10-1 예외 클래스
자바에서 예외는 객체로 표현되며, Throwable클래스를 상송 받는 여러 클래스들로 구성됩니다.
예외와 예외 클래스
예외에는 일반 예외(exception)과 실행 예외(runtime exception) 두가지 종류가 있습니다.
실행 예외(runtime exception)
- NullPointerException
객체가 null인 상태에서 해당 객체의 메서드나 필드를 접근하려고 할 때 발생합니다.
String data = null;
System.out.println(data.toString());
- ArrayIndexOutOfBoundsException
배열의 유효한 인덱스를 벗어난 값을 접근하려고 할 때 발생합니다.
예를 들어 배열의 길이가 3인데, 인덱스 3 도는 그 이상의 값을 참조할 때 발생합니다.
int[] arr = new int[3];
System.out.println(arr[3]);
- NumberFormatException
문자열을 숫자로 변환할 때, 해당 문자열이 숫자 형식이 아닐 경우 발생합니다.
예를 들어, “abc”와 같은 문자열을 Integer.parseInt() 메서드로 변호나하려고 할때 발생합니다.
String data1 = "abc";
int value1 = Integer.parseInt(data1);
- ClassCastException
객체를 잘못된 타입으로 캐스팅하려고 할 때 발생합니다.
예를 들어, 상위 클래스 타입의 객체를 하위 클래스 타입으로 잘못 캐스팅할 경우 발생합니다.
Animal animal = new Dog();
Cat cat = (Cat) animal;
10-2 예외 처리
예외 처리는 프로그램이 비정상적으로 종료되는 것을 방지하고, 오류 발생 시 적절한 조치를 취할 수 있도록 돕는 과정입니다. 자바에서는 try-catch-finally 문을 사용하여 예외를 처리합니다.
예외 처리 코드
try블록 내에서 예외가 발생할 가능성이 있는 코드를 작성하고, catch 블록에서 해당 예외를 처리합니다.
예를 들어, 존재하지 않는 클래스를 로드하려고 할경우 ClassNotFoundException이 발생할 수 있습니다.
public class TryCatchFinallyExample {
public static void main(String[] args) {
try {
Class clazz = Class.forName("java.lang.String2");
} catch(ClassNotFoundException e) {
System.out.println("클래스가 존재하지 않습니다.");
}
}
}
예외 종류에 따른 처리 코드
발생할 수 있는 예외의 종류에 따라 여러 개의 catch 블록을 사용할 수 있습니다. 각 블록은 특정 예제를 처리하도록 정의할 수 있습니다.
public class CatchByExceptionKindExample {
public static void main(String[] args) {
try {
String data1 = args[0];
String data2 = args[1];
int value1 = Integer.parseInt(data1);
int value2 = Integer.parseInt(data2);
int result = value1 + value2;
System.out.println(data1 + " + " + data2 + " = " + result);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("실행 매개값의 수가 부족합니다.");
} catch(NumberFormatException e) {
System.out.println("숫자로 변환할 수 없습니다.");
} finally {
System.out.println("다시 실행하세요.");
}
}
}
예외 떠넘기기
메서드에서 발생한 예외를 처리하지 않고 호출한 곳으로 전달할 수 있습니다.
이를 위해 메서드 선언부에 throws 키워드를 사용합니다.
public class ThrowsExample {
public static void main(String[] args) {
try {
findClass();
} catch (ClassNotFoundException e) {
System.out.println("클래스가 존재하지 않습니다.");
}
}
public static void findClass() throws ClassNotFoundException {
Class clazz = Class.forName("java.lang.String2");
}
}
Chapter 11 기본 API 클래스
11. 1 java.lang 패키지
자바의 기본 API 클래스는 프로그래밍을 보다 효율적으로 할 수 있는 다양한 기능을 제공합니다. 이번 장에서는 java.lang 패키지 일부 클래스 들과 도큐먼트를 참고해서 사용하는 방법등을 배울수 있습니다.
자바 API 도큐먼트
자바 API 도큐먼트는 자바의 모든 클래스와 메서드에 대한 정보를 제공합니다. 이 문서는 각 클래스의 기능, 필드, 메서드, 생성자 등에 대한 설명을 포함하고 있으며, 개발자는 이를 통해 클래스의 사용법을 쉽게 이해할 수 있습니다.
https://docs.oracle.com/en/java/javase/22/index.html
API 도큐먼트에서 클래스 페이지 읽는 방법
각 클래스 페이지는 클래스의 설명, 생성자, 메서드, 필드 등을 포함하고 있습니다. 이를 통해 클래스의 전체적인 구조와 사용법을 파악할 수 있으며, 예제 코드도 포함되어 있어 실습에 도움이 됩니다.
Object 클래스
모든 자바 클래스는 Object 클래스를 상송받습니다. 이 클래스는 객체의 기본적인 기능을 정의하며, equals(), hasCode(), toString()과 같은 메서드를 제공합니다. 이를 통해 객체 비교, 해시 코드 생성, 문자열 표현 등을 쉽게 처리할 수 있습니다.
System 클래스
System 클래스는 시스템과 관련 기능을 제공하며, 입력, 출력, 환경 변수, 현재 시간 등의 정보에 접근할 수 있습니다.
// 프로그램 종료(exit())
System.exit(0);
// 현재 시각 읽기(currentTimeMills(), nanoTime())
long time = System.currentTimeMills();
long time = System.nanoTime();
Class 클래스
Class 클래스는 클래스에 대한 정보를 제공하는 메타데이터를 포함하고 있습니다. 이를 통해 클래스의 이름, 메서드, 필드 등을 동적으로 확인하고 조작할 수 있습니다.
public class ClassExample {
public static void main(String[] args) {
Class clazz = Car.class;
System.out.println(clazz.getName());
System.out.println(clazz.getSimpleName());
System.out.println(clazz.getPackage().getName());
}
}
String 클래스
문자열을 다루기 위한 다양한 메서드를 제공하는 클래스입니다. String 클래스는 불변성을 갖고 있어, 문자열을 변경할 경우 새로운 객체가 생성되며, 문자열을 생성하는 방법과 추출, 비교, 찾기, 분리, 변환 등을 제공하는 메소드를 알아두어야 합니다.
// 문자 추출(charAt())
String subject = "자바 프로그래밍";
char charValue = subject.charAt(3);
// 문자열 비교(equals())
String strVar1 = new String("신민철");
String strVar2 = "신민철";
String strVar3 = "신민철";
strVar1 == strVar2; // false
strVar2 == strVar3; // true
strVar1.equals(strVar2); // true
strVar2.equals(strVar3); // true
// 바이트 배열로 변환(getBytes())
byte[] bytes = "문자열".getBytes();
byte[] bytes = "문자열".getbytes(Charset charset);
try {
byte[] bytes1 = "문자열".getBytes("EUC-KR");
byte[] bytes2 = "문자열".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
}
// 문자열 찾기(indexOf())
String subject = "자바 프로그래밍";
int index = subject.indexOf("프로그래밍");
// 문자열 길이(length())
String subject = "자바 프로그래밍";
int length = subject.length();
// 문자열 대치(replace())
String oldStr = "자바 프로그래밍";
String newStr = oldStr.replace("자바", "JAVA");
// 문자열 잘라내기(substring())
String ssn = "88-815-1234567";
String firstNum = ssn.substring(0, 6);
String secondNum = ssn.substring(7);
// 알파벳 소, 대문자 변경(toLowerCase(), toUpperCase())
String original = "Java Programming";
String lowerCase = original.toLowerCase();
String upperCase = original.toUpperCase();
// 문자열 앞뒤 공백 잘라내기(trim())
String oldStr = " 자바 프로그래밍 ";
String newStr = oldStr.trim();
// 문자열 변환(valueOf())
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(double d)
static String valueOf(float f)
Wrapper(포장) 클래스
기본 데이터 타입을 객체로 감싸는 클래스입니다. 예를 들어, int는 Integer, double은 Double로 포장되어 객체로 다룰 수 있습니다.
public class WrapperExample {
public static void main(String[] args) {
Integer obj3 = Integer.valueOf("300"); // 박싱
int value3 = obj3.intValue(); // 언박싱
System.out.println(value3);
}
}
Math 클래스
수학적 계산을 위한 다양한 메서드를 제공합니다. 삼각 함수, 로그, 제곱근 등의 함수가 포함되어 있어 복잡한 수학 계산을 쉽게 수행할 수 있습니다.
public class MathExample {
public static void main(String[] args) {
double sqrtValue = Math.sqrt(16); // 제곱근
System.out.println("16의 제곱근: " + sqrtValue);
double randomValue = Math.random(); // 랜덤값
System.out.println("랜덤 값: " + randomValue);
}
}
기본 숙제(필수) : p.486 10-2 확인 문제 2번 문제 풀고 과정 설명 하기
정답 : 4
throws는 새로운 예외를 발생시키기 위해 사용되는 것이 아니라, 메서드나 생성자에게 발생할 수 있는 예외를 선언하여 호출자에게 처리하도록 떠넘기기 위해 사용된다.
1: 482p 하단 부분, throws 키워드는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 합니다.
2: 482p 하단 부분, throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해서 나열해주면 됩니다.
3 : 482p 하단 부분, throws Exception만으로 모든 예외를 간단히 떠넘길 수도 있습니다.
추가 숙제(선택) : java.lang 패키지에 속하는 주요 클래스와 용도를 정리해서 포스팅하기
- Object
모든 클래스의 최상위 클래스. 모든 자바 클래스는 Object 클래스로부터 상속 됩니다. 기본적인 메서드인 equals(), hasCode(), toString(), clone(), finalize() 등을 제공합니다.
Object obj = new Object();
System.out.println(obj.toString());
- String
문자열을 표현하는 클래스. 문자열을 생성하고 조작하는 데 필요한 다양한 메서드를 제공합니다. 불변(immutable) 객체로, 수정이 필요할 경우 새로운 문자열 객체를 생성합니다.
System.out.println("abc");
String cde = "cde";
System.out.println("abc" + cde);
String c = "abc".substring(2, 3);
String d = cde.substring(1, 2);
- Math
수학적 상위와 메서드를 제공하는 클래스, 삼각 함수, 로그, 지수, 제곱근 등의 다양한 수학적 계산을 위한 메서드를 포함하고 있습니다.
double result = Math.sqrt(25);
System.out.println(result);
- System
시스템 관련 기능을 제공하는 클래스. 표준 입력/출력, 시스템 속성, 환경 변수, 시간 측정 등을 위한 메서드를 포함합니다. 예를 들어 System.out을 통해 콘솔에 출력할 수 있습니다.
System.out.println("Hello, World!");
long currentTime = System.currentTimeMillis();
System.out.println("현재시간(밀리초): " + currentTime);
- Class
자바 클래스에 대한 메타데이터를 제공하는 클래스. 클래스의 이름, 부모 클래스, 구현한 인터페이스, 메서드, 필드 등의 정보를 얻는 데 사용됩니다.
Class clazz = String.class;
System.out.println("클래스 이름: " + clazz.getName()); // java.lang.String