day16

<복습>
예외: 코드로 해결 가능한 문제들
	-예외처리: 예외가 발생할 수 있는 코드를 예외가 발생했을 때, 처리할 수 있도록 작성하는 코드
	
	1. 일반예외 : 실행되기 전에 컴파일에서 예외가 발생
	2. 실행예외 : 실행했을 때, 발생
	
	<예외 종류>
		1. ClassCastException
			1) 클래스 타입 변환 시(**상속, 인터페이스 구현관계***) 발생 가능
			2) 부모 클래스 객체를 자식 클래스로 변환할 때 발생 가능* => 주의: 항상예외가 발생하는건 아님!
				->부모클래스 객체는 범위가 작고 자식클래스는 범위가 크기때문에 전환할때 문제가 생길 수 있음
					**(많은애가 작아지는건 괜찮은데, 작은애가 많아지는건 안돼)**
		2. ArrayIndexOutofBoundsException
			1) 배열을 이용할 때 발생 가능
			2) 잘못된 번지를 이용하여 접근하는 경우 발생
		3. NullPointerException	=> **참조변수 확인하기**
			1) 참조변수를 이용할 때 발생 가능
			2) 객체를 생성하지 않고, 멤버변수나 멤버메소드를 호출 할 때 발생
		4. NumberFormatException
			1) **문자열을 숫자로** 변환할 때 발생 가능
			2) **숫자로 바꾸려는** 문자열에 알파벳이나 특수문자 등이 포함된 경우 발생
		5. ArithmeticException => 계산,산수예외
			1) 나누기할 때, 발생 가능 ( / , %)
			2) **0으로 나누면 발생**
	
	예외처리: 
		1)직접처리하는 try catch => 예외가 발생하면 발생한 위치에서 직접처리한 것 //****중괄호만있고 소괄호() 없음 주의**
			생김새:
				try{
					예외가 발생할 수 있는 코드;						
				}catch(예외클래스1 e){											//예외클래스는 예외종류 말함, catch는 약간 if처럼 작동함
							예외가 발생했을 때 실행할 코드1;
				}catch(예외클래스2 e){
							예외2가 발생했을 때 실행할 코드2;
				}catch(Exception e){										//이거 꼭 마지막에 써줘야 함(위에꺼아니라서 온 실행 순서니깐)
							예외1, 예외2를 제외한 모든 예외가 발생했을 때 실행할 코드3;
				}finally{													  //예외가 발생하지 않으면 finally로 바로 감
							항상실행;											//finally는 메소드가 종료되더라도 무조건 실행
				}
	
		2) throw => 자바에서 정해놓은 예외가 아닌 **개발자가 필요에 의해 발생시키는 예외**를 만들 때, 사용 (=throw특정상황을 일부러 만들어서 //try로 예외처리,해결함)
			생김새:
				throw 예외객체;
			
			특징
			 - 실행예외가 아닌 **일반 예외는 무조건 예외처리를 해야한다**.
			 - 실행 예외는 예외처리를 안해도 프로그램은 실행 됨.
			 - 실행 예외는 RuntimeException을 상속받은 예외 클래스들이다. (RuntimeException 포함)
		
		
		3) 떠넘기기 throws
			특징
			 - 메소드에서 예외가 발생한 경우, **직접 예외처리를 하지 않고 호출한 메소드에게 예외처리를 떠넘길 수 있다.**
			 - 메소드에 throws를 이용하여 해당 메소드에서 발생할 수 있는 예외 종류들을 알려줘야 한다.
			 - 단, 실행 예외인 경우 throws에 알려주지 않아도 된다. 
		

Object 클래스 => equals랑 toString은 꼭 쓸 줄 알아야함.
	- 모든 클래스의 조상 (모든 클래스는 object 클래스를 상속받음=> 오버라이딩해야함)
	- object클래스에서 제공하는 메소드를 오버라이딩*해서 잘 사용해야 한다.
	
	-오버라이딩해서 사용할 메소드들** <클릭으로 만들 수 있음>
		- equals()
			- Object클래스의 equals()는 두 객체의 주소가 같은지를 확인
			- 클래스에서 **equals()를 오버라이딩해서 원하는 값을 확인하는 메소드로 수정**해야한다	//추가: String이라는 클래스는 equals()가 이미 구현되어있음
			- Object 클래스의 자식 클래스는 equals()를 오버라이딩해서 객체 멤버변수의 값이 같으면 같은 객체로 판별할 수 있다.
			
		- hashCode()
			- 해쉬코드값을 이용하여 그룹으로 묶어서 분류한다.
			- equals()확인하기전에 hashCode로 먼저 같은 분류에 들어가있는지 확인하고, 다르면 확인 멈추고 다름/ 같으면 equals() ㄱㄱ 
			
		-toString()
			- 클래스의 멤버변수 값을 문자열로 바꿀 때, 사용하는 메소드
			- system.out.println(객체명) 을하면, 해당하는 객체의 toString()이 자동으로 호출된다.  	

<<Review>>	

예외
	-try catch 또는 throws를 이용하지 않고 조건문과 리턴값을 이용하여 예외 처리를 할 수 있다.
	 하지만, 메소드에 리턴값이 이미 있는 경우는 조건문과 리턴값을 이용하여 예외처리를 할 수 없다.
	-조건문과 리턴값을 이용한 예외처리는 한계가 있기때문에 잘 사용되지 않는다.

Object 클래스
	-모든 클래스의 조상클래스
	-equals()
	-toString()