본 글은 책 자바의 정석을 ref 하여 요약한 글입니다.
컴파일 에러 - 컴파일할 때 발생하는 에러
런타임 에러 - 프로그램 실행 중 발생하는 에러
논리적 에러 - 논리적으로 발생한 에러
런타임 에러시 발생
에러 - 프로그램 중지를 막을 수 없다.
예외 - 예외로 프로그램이 중지될 수 있지만 미리 예방 코드를 작성해두었다면 중지되지 않는다.
코드를 통한 처리의 주된 관심사는 예외이다.
Exception 하위 (외부의 영향으로 발생하는 예외) ⁕⁕ checked 예외(예외 처리가 반드시 필요하다)
RuntimeException 하위 (프로그래머의 실수로 발생하는 예외) ⁕⁕ unchecked 예외(예외처리는 선택사항)
* checked보다 unchecked를 이용하는 것이 더 코드를 깔끔하게 만들 수 있으므로
* Exception보다 RuntimeException을 상속받고 unchecked를 사용하는 쪽으로 변화 중
try - catch
예외가 발생하면 예외에 해당되는 인스턴스가 생성
인스턴스로 catch블록의 타입을 이용하여 검사한다.
(발생한 예외 객체) instanceof (catch블록 타입)
finally
예외 발생여부와 관계없이 반드시 실행
try - with - resources
try(따로 close를 호출하지 않아도 try 블럭을 벗어나는 순간 close()호출 ){
내부작업
}catch(Exception e){
}
예외 발생시키기
예외가 발생하면 예외 객체를 생성한다. 예외가 발생하지 않아도 프로그래머가 예외 객체를 직접 생성해줄 수 있다.
생성된 예외를 throw를 이용하여 예외를 발생시킬 수 있다.
메서드에 예외 선언(호출부에 예외 처리 전가)
메서드 선언부에 throws (메서드 내부에서 발생 가능성 있는 예외를 호출부에 알려주는 역할)
* checked 예외만 적어둔다.
내부에서 처리하지 않고, 호출부에서의 에러처리를 강요한다.
사용자 정의 예외
Exception을 상속받아서 생성자에 msg
예외 되던지기
예외를 처리해준 후 catch문에서 다시 throw 한다.
연결된 예외
예외를 생성한 이후 initCause 메서드에 원인 예외를 등록한다.
- 여러가지 예외를 하나로 묶어서 처리해줄 수 있다. (사용부에서 하나의 예외만 처리해주면 되니 간편해짐)
- checked 예외를 unchecked로 만들 수 있다.
** 예외가 발생하면 원인 예외도 log를 볼 수 있다.
java.lang 패키지
import 없이 사용, 기본이 되는 클래스들을 포함(Object, System, String, Math ..)
Object클래스
equals - 오버라이딩하지 않으면 참조값 비교, 오버라이딩 후 프로그래머가 원하는 값으로 비교
hashCode - 객체 자신의 hashCode반환, equals를 오버라이딩하면 hashCode도 해야한다. (HashSet, HashMap에서 이용한다.)
toString - 인스턴스 정보의 문자열
clone - 단순히 인스턴스 값을 복사. 인스턴스가 참조값이라면 참조값도 복사하기때문에 원본에 영향
getClass - 클래스 객체를 반환. 객체의 모든 정보를 담고 있다.
* Reflection
* 클래스 객체를 이용하면 객체 생성, 메소드 호출 등이 가능하다. 클래스당 1개만 존재
String클래스
변경 불가능. +연산자를 이용해서 결합하는 경우 변경되는 것이 아니라 새로 생성하는 것. 메모리에 악영향
문자가 이미 저장되어있다면 재사용
(Heap - String Constant Pool)
* constant pool - 클래스파일이 클래스 로더에 의해 메모리에 올라갈 때 문자열 리터럴들이 constant pool에 올라간다.
equals를 이용하여 비교해야한다.
StringBuffer, StringBuilder
내부적으로 버퍼를 갖고 크기를 변경한다.
변경할 땐 배열과 마찬가지로 버퍼를 키운 후 배열에 문자를 복사한다.
equals가 오버라이딩 되어있지 않다.
StringBuffer는 쓰레드 환경에서 안전하다.
Math클래스
abs - 절대값을 반환
ceil - 올림하여 반환
floor - 버림하고 반환
max, min - 두값을 비교
round - 소수점 첫째자리를 반올림한다.
wrapper 클래스
기본형을 객체로 다룰 때 사용한다.
전부 equals가 값의 비교로 오버라이딩 되있다.
* 내부적으로 객체를 사용하는 컬렉션프레임워크를 사용하면 자동으로 객체로 오토박싱
* 기본형 타입에 대입하면 자동으로 언박싱
java.util.패키지
유용한 클래스들의 모음(컬렉션 프레임워크, Objects, Random, regex, Scanner, StringTokenizer ...)
대부분의 메서드가 static
Objects
isnull(Object) 널 체크
hash(values...) 해시코드를 만든 후 반환
regex
정규표현식 - 패턴을 지정하고 같은 패턴을 찾는다.
Scanner
nextLine 외에도 nextInt, nextLong으로 입력을 받을 수 있어서 추가적인 작업이 덜 필요하다.
StringTokenizer
문자열을 자르는데 사용한다. 구분자를 지정할 수 있고, 구분자를 버리거나 사용할 수 있다.
BigInteger
값의 표현을 기본형보다 많이 할 수 있다.
add, subtract, multiply, divide, remainder
BigDecimal
정확한 실수형을 다룰 때 사용한다. 생성자는 0.1보다는 "0.1" 로 표현하는것이 오차가 발생하지 않는다.
'프로그래밍 > 자바' 카테고리의 다른 글
11장 컬렉션 프레임 워크 (0) | 2022.07.28 |
---|---|
10장 날짜와 시간 & 형식화 (0) | 2022.07.28 |
6장, 7장 객체지향 프로그래밍 (0) | 2022.07.28 |
3장 연산자, 4장 조건문과 반복문, 5장 배열 (0) | 2022.07.28 |
1장 자바, 2장 변수 (0) | 2022.07.28 |