와우 5시간씩 꾹꾹 눌러 배워서 정리가 안 끝나는 매직...★ 살려주세오...
1. 예외처리
컴파일 에러 : 컴파일 할 때 문법적으로 오류가 발생
런타임 에러 : 실행은 되지만 프로그램에서 문제가 발생
- 에러(error) : 코딩으로 해결할 수 없는 심각한 오류
ex. OOME(Out Of Memory Error) > 메모리 부족으로 인한 에러 - 예외(exception) : 코딩으로 해결할 수 있는 오류

예외처리를 사용하는 이유?
1) 프로그램이 강제종료 되는 것을 막기 위해
2) 제어문으로는 처리할 수 없는 경우
Exception 클래스
모든 예외들의 부모클래스
사용자의 실수와 같은 외적인 요인이 발생하는 예외
어떤 예외가 발생하든지 Exception 타입으로 잡을 수 있다.
RuntimeException 클래스
프로그래머의 실수로 발생하는 예외
컴파일러가 예외처리 여부를 체크하진 않지만, 실행 시 프로그램 종료
Exception 계층도

try ~ catch ~ finally
try {
예외가 발생할 수 있는 문장
} catch(예외클래스명 객체명) {
예외가 발생시 수행할 문장
} catch(예외클래스명 객체명) {
예외 발생 시 수행할 문장
(catch블럭은 여러 개 사용 가능)
}
...
finally {
예외 발생 유무에 상관없이 무조건 실행할 문장(생략가능)
***주로 외부 장치와 연결했을 경우 다시 닫을 때 사용한다.
ex. printWrite open()과 close()
}
try에서 예외가 발생했을 경우
1) 해당 예외와 일치하는 catch로 가서 예외처리를 한다. 만약 일치하는 catch가 없다면 예외처리가 되지 않고 프로그램이 비정상 종료된다.
2) catch에 있는 전체 문장을 수행한 후, try ~ catch문을 탈출하여 나머지 로직을 수행한다. 따라서 try에 예외발생한 문장 이후의 나머지 문장이 남아있어도 수행되지 않는다. finally를 사용하여 나머지 문장을 실행하면 된다
try에서 예외가 발생하지 않았을 경우
catch를 거치지 않고 try ~ catch문을 탈출하여 나머지 로직을 수행한다.
예제

실습

▶ try ~ catch문으로 실행해 언제 예외가 발생하는지 확인한다.
▶ 예를 들어, num1 = 10, num2 = 5를 입력하면 정상적으로 출력되지만 num1 = 10, num2 = 0을 입력하면 런타임에러 중 ArithmeticException이 발생한다.(나눗셈에서 0으로 나누는 것은 불가능하기 때문)

▶ 예외 찾는 과정을 계속한다.
▶ 정수가 아닌 것을 입력했을 때 예외 발생(InputMismatchException) > 입력받는 과정 역시 예외가 발생할 수 있다는 걸 알 수 있다.


▶ 나가기 기능 추가하기

throws
메소드 실행 시 발생할 수 있는 예외를 선언하여 호출하는 쪽에 알리는 것
직접 예외처리를 하지 않고 메소드 호출한 곳으로 떠넘겨서, 메소드를 호출한 곳에서 예외처리를 하겠다는 뜻
★throw와 전혀 다름
리턴타입 메소드명() throws 예외1, 예외2, ...{
// 메소드 내용
}

throws 예제



2. API
개발에 필요한 주요 기능들을 제공하는 라이브러리들의 집합
선배 개발자들이 JAVA에서 코딩을 쉽게 할 수 있도록 미리 만들어 놓은 부품들
JAVA API
자바 시스템을 제어하기 위해서 자바에서 제공하는 기능(명령어)
JDK 설치 시 제공해주는 기본 API
java.lang
자바 프로그래밍을 위한 가장 기본적인 패키지와 핵심적인 클래스들을 포함
외부 API
선배 개발자들이 개발한 패키지 및 클래스들을 의미
보통 jar파일로 배포하며 자바 프로젝트에 import하여 사용할 수 있다.
*** API의 종류는 굉장히 많고 다양하기 때문에 모두 외우는 것은 절대 불가능하다.
그래서 처음 보는 API라도 설명을 잘 읽고 맞는 목적으로 사용하는 방법을 알아야 한다. ***
javadocs
클래스, 메소드에 대한 도움말 문서
java API 문서는 JAVADOCS 프로그램으로 만들어진 문서로 볼 수 있다.
API 사용하는 이유?
개발 비용과 시간이 획기적으로 줄어든다.
누군가 만들어 놓은 API를 이용하면 해당 서비스가 구현되는 원리는 모르더라도 API를 통해 서비스를 그대로 사용이 가능하다.
어노테이션 주석
/*
내부에 javadocs 문서에 대한 내용을 작성한다.
*/
@author 개발자
@param 메소드에서의 매개변수
@return 메소드에서의 리턴값
@exception 메소드에서 발생하는 예외
@throws throws에 대한 설명
@see 참고할만한 링크
@since 사용 가능한 JDK버전
@version 클래스의 버전 정보
3. Object 클래스
모든 클래스들의 최상위 클래스
toString() : 객체를 문자열로 바꿔서 반환해주는 메소드
주로 오버라이딩을 통해 인스턴스의 정보를 알기 쉽게 출력하기 위해 사용
equals() : 두 객체의 주소값을 비교하는 메소드(boolean)
equals()를 오버라이딩할 경우 주소값이 아닌 인스턴스 변수(iv)를 비교할 수 있도록 한다.
hashCode() : 객체의 해시값(주소값과 관련된 어떤 값)을 int로 바꿔서 반환하는 메소드
*** equals를 재정의하면 hashCode()도 재정의 해야한다.
equals()와 hashCode() 모두 초기에는 객체의 주소값으로 작업을 하는 공통점이 있다.
만약 equals()가 재정의를 통해 인스턴스변수(iv)로 작업을 한다면, hashCode()도 마찬가지로 iv를 이용해서 작업하도록 오버라이딩 해야한다.
따라서 equals()의 결과가 true라면 두 객체의 hashCode()도 같다.
예제1

▶️toString이 주소값 보는 용도가 아니기 때문에 오버라이딩 해준다.


예제2


▶️ equals가 true인데 hashCode의 주소값은 다름으로 false인 상태 > 즉, 모순되는 상황이다.
▶️ 따라서 equals를 재정의해주면 hashCode도 재정의 해주어야 한다.

실습


4. String 클래스
char[]과 관련 메소드들로 이루어져 있다.
내용을 변경할 수 없는 불변 클래스
String data1 = "pine"
String data2 = "apple"
data1 = data1 + data2 // pineapple
> pineapple이라는 새로운 문자열 객체가 생기고 문자열 값끼리 비교한다.
equals() : String 클래스 안의 equals는 Objects 클래스의 equals와 다름. 매개변수로 받은 문자열과 비교하기 때문에 문자열 값끼리 비교한다. 따라서 문자열이 다르거나 매개변수가 String이 아닐 경우 false 반환
예제


5. Wrapper Class(래퍼 클래스)
기본 자료형 값을 클래스로 감싸는 것
기본형 타입의 값을 객체로 다뤄야 할 때, 객체로서 사용 가능하게 해주는 클래스
ing > Integer
char > Character
double > Double
boolean > Boolean
boxing
기본형을 클래스형으로 바꿔주는 것
unboxing
클래스형을 기본형으로 바꿔주는 것
예제

수동
Wrapper 클래스명 참조변수 = new Wrapper생성자(기본형 값) // 박싱
기본자료형 변수명 = 객체.형타입Value(); // 언박싱
자동
jdk 1.5버전부터는 오토를 지원하기 때문에 컴파일러가 자동으로 형변환을 해준다.
Wrapper클래스명 참조변수 = 기본자료형 값; // 오토박싱
기본자료형 변수명 = 객체; // 오토언박싱
Wrapper 클래스 사용 이유?
1) 기본형 타입의 값을 객체로 다루어야 할 때
2) 매개변수로 객체를 넘길 때(특히 Object에는 객체를 넘겨주어야 하므로 래퍼클래스 사용)
3) 기본 자료형 타입을 (오토)박싱하면 래퍼클래스의 다양한 메소드를 사용 가능하다.
실습

'이론 > 자바 기초' 카테고리의 다른 글
java 그게 뭐야? 17.HashSet, Iterator, HashMap, 빠른 for문 (0) | 2022.03.20 |
---|---|
JAVA 그게 뭐야? 16. 컬렉션프레임워크, ArrayList, <>Generic제네릭 (0) | 2022.03.19 |
JAVA 그게 뭐야? 14. 접근 권한 제어자, 추상메소드, 캡슐화, 익명클래스 (0) | 2022.03.12 |
JAVA 그게 뭐야? 13. 상속2 (0) | 2022.03.06 |
JAVA 그게 뭐야? 12. 변수와 상속1 (0) | 2022.03.04 |