어? 이게 되네
2022.04.08. 금요일 이공계 전문기술 연수사업 10일차 본문
오늘 배운 것
예외처리
ㄴ프로그램 실행 중에 사용자의 부주의 등으로 인하여 예기치 않는 상황이 발생한 것
이 것을 처리하는 것을 "예외처리"라고 함.
자바에서는 대부분의 예외에 대하여 이미 클래스로 만들어져있고,
그 상황이 되면 자동으로 예외객체가 생성됨.
예외처리를 위해서는 다음과 같이 try ~ catch구문을 이용함.
try{
예외가 발생할 만한 명령어(들)
}catch(예외클래스명){
예외가 발생되었을 때 처리할 명령어(들)
}
하나의 try에 여러 개의 catch가 올 수 있음.
여러 개의 catch가 올 때에는 반드시 범위가 작은 순서대로 와야함.
----------------------------------------------------------------------------
finally
예외가 발생하든 예외가 발생하지 않든 반드시 동작시켜야 할 명령어들을 두는 곳
------------------------------------------------------------------------------
메소드에서의 예외
ㄴ1.메소드 안에서 직접 try~catch로 처리한다.
ㄴ2.메소드를 호출하는 쪽으로 예외처리를 맡긴다.(전파)
public void pro() throws 예외클래스명1,예외클래스명2...{
예외가 발생할 만한 명령어(들)
}
java.io
java.net
java.sql
위 패키지 대부분의 생성자와 메소드들은 예외를 안고 있음.
------------------------------------------------------------------------------
RuntimeException
ㄴRuntimeException의 후손들은 사용자가 예외처리를 하지 않아도
컴파일이 가능하고 자바가 예외처리를 해줌.
필요하다면 사용자가 직접 예외처리 할 수 있음
그러나 RuntimeException의 후손이 아닌 것들은
사용자가 예외처리를 하지 않으면
사용자가 직접 예외처리를 해야 함.
만약 사용자가 예외처리를 하지 않으면 컴파일되지 않음
(예외의 부모중에 런타임예외가 있으면 따로 예외처리 하지 안해도 된다는 소리)
------------------------------------------------------------------------------
FileWriter의 생성자는 다음과 같이 예외를 포함하고 있음
public FileWriter(File file) throws IOException
ㄴIOException은 런타임 예외의 후손이 아니기 때문에 사용자가 반드시 예외 처리를 해야함.
public static void calcDiv(int a,int b) throws ArithmeticException
ㄴArithmeticException은 런타임 예외의 후손이기 때문에 예외 처리를 따로 하지 않아도 컴파일 됨.
-------------------------------------------------------------------------------
자바에서는 대부분의 예외에 대하여 이미 클래스로 만들어져있고,
그 상황이 되면 자동으로 예외객체가 생성됨.
어떤 메소드에서 예외가 발생할 때, 그 메소드 안에서 예외 처리를 하지 않고
메소드 호출하는 쪽으로 예외를 전파하고자할 때 메소드 이름 뒤에 throws 예외클래스명을 붙여서 전달함.
때로는 사용자가 강제로 예외를 발생시켜야 할 필요가 있다면 throw 키워드를 사용함.
throw new 예외클래스명()
------------------------------------------------------------------------------
throws vs throw
throws 는 메소드 안에서 예외가 발생될 때 메소드 호출하는 쪽으로 예외를 전파할 때 사용
throw 는 강제로 예외를 발생시킬 때 사용
-------------------------------------------------------------------------------
사용자 정의 예외
ㄴ대부분의 일반적인 예외에 대해서는 자바가 이미 클래스로 만들어두었지만,
내가 만드는 시스템에서의 특별한 예외에 대해서는 자바가 모름!
그럴 때 사용자가 예외 클래스를 만들 수 있음.
그런 상황이 되어도 자바는 모르기 때문에 직접 예외 객체를 생성해야 함.
-------------------------------------------------------------------------------
사용자 정의 예외 만들기
class 예외클래스이름 extends Exception{
public 예외클래스이름(String msg){
super(msg); //부모에게 메시지 전달..? 이게 무슨 뜻이지..?
}
}
throw new 예외클래스이름();
사용자 정의예외는 런타임 예외 후손이 아니기 때문에 반드시 예외 처리를 해야함.
--------------------------------------------------------------------------------
StringTokenizer();
--------------------------------------------------------------------------------
자바의 컬렉션
ㄴ많은 양의 데이터를 처리하기 위해서는 배열을 이용함.
그러나 배열은 자료형이 같아야 하고, 크기가 고정되어 있어서 처음 정해진 크기보다 더 많은 데이터를
저장하기 어려움. 또 데이터의 추가 또는 삭제가 빈번한 경우 처리하기가 어려움.
이와 같은 단점을 보완하기 위하여
자바에서는 더 좋은 배열을 제공함. =>그것을 "컬렉션"이라고 함.
컬렉션
ㄴ자료형이 다른 것도 담을 수 있음, 동적인 배열로써 자료의 추가,삭제하기가 용이함.
데이터를 담는 것만큼 혹은 데이터를 삭제하는 것만큼 자동으로 크기가 늘어나고 줄어듦.
---------------------------------------------------------------------------------
컬렉션의 종류
ㄴset
ㄴㄴ순서가 없고 중복된 자료를 허용하지 않음.
ㄴlist
ㄴㄴ중복된 자료를 허용함.
ㄴmap
ㄴㄴ데이터에 접근하기 위해 인덱스가 아닌 key에 의해 접근함. 즉, key와 value가 한 쌍으로 이루어지는 자료구조임.
--------------------------------------------------------------------------------
set
HashSet : 중복을 허용하지 않고 순서 무시
LinkedHahSet : 중복을 허용하지 않고 순서를 유지함
TreeSet: 중복을 허용하지 않고 사전식 정렬 - 이게 무슨 뜻?
--------------------------------------------------------------------------------
list
예전에는 Vector를 많이 사용하였으나 근래에는 ArrayList를 가장 많이 사용함.
ArrayList : 중복을 허용하며 순서도 유지함. 대체로 많이 씀
LinkedList : 중복을 허용하며 순서도 유지하지만 자료의 추가 삭제가 빈번할 경우에는 LinkedList가 더 용이함.
--------------------------------------------------------------------------------
사용하는 방법은 동일한데 추가/삭제엔 LinkedList가 더 용이한 이유?
=>내부적으로 동작하는 방식이 달라서 !
ArrayList의 동작 방식:
뭔가를 추가하고 싶으면 하나 더 메모리 공간을 만들어서(반복문을 써서) 일일히 옮겨줌.
LinkedList의 동작 방식:
연속되어있지 않은 객체가 있고 그 안에 속성과 다음 주소가 짝지어져있고 그 객체들이 주소 순서대로 연결되어있음.
뭔가를 추가하고 싶으면 비어있는 곳에 메모리를 잡고 그 안에 속성과 다음 주소를 짝 지어 만든다!
(더 효율성이 좋음)
--------------------------------------------------------------------------------
Map
ㄴkey의 중복을 허용하지 않음
만약, 중복된 key의 값을 추가하게 되면 원래의 값을 반환하고 새로운 값으로 바뀜.
HashMap : 순서를 유지하지 않음
LinkedHashMap : 순서를 유지함.
TreeMap : key를 기준으로 정렬해줌
오늘 헷갈린 것
- exam 14 MyDateTest 오류 이유 알고 고치기
- LinkedList의 추가 삭제 동작하는 방식
- exam15 오류나는 이유!!!
오늘 한 생각
남들과 비교하지 말고 조금씩이라도 꾸준하게 성장하는게 중요하다,,,ㅠ
'TIL' 카테고리의 다른 글
2022.04.12. 화요일 이공계 전문기술 연수사업 12일차 (2) | 2022.04.12 |
---|---|
2022.04.11. 월요일 이공계 전문기술 연수사업 11일차 (0) | 2022.04.11 |
2022.04.07. 목요일 이공계 전문기술 연수사업 9일차 (0) | 2022.04.07 |
2022.04.06. 수요일 이공계 전문기술 연수사업 8일차 (0) | 2022.04.06 |
2022.04.05. 화요일 이공계 전문기술 연수사업 7일차 (0) | 2022.04.05 |