Open jiseongkimu opened 4 years ago
오류(Error) : 시스템 레벨의 비정상적인 상황이 생겼을 때 발생. 개발자가 미리 예측하여 처리할 수 없음 예외(Exception) : 개발자가 구현한 로직에서 발생. 발생 상황을 미리 예측하여 처리할 수 있음
[예외클래스의 구조]
Exception의 자식 클래스 중 RuntimeException을 제외한 모든 클래스는 CheckedException이며, RuntimeException과 그의 자식 클래스들을 Unchecked Exception이라 부른다.
Checked exceptions : 프로그래머가 사용하는 라이브러리, 코드 등에서 new 생성자를 이용해 만들어졌고, 해당 모듈을 사용하는 오브젝트에게 여기서 예외가 발생할 수 있으니 throws 키워드를 이용해서 상위 caller에게 예외를 전달하든, 네가 확인해서 처리하든지 하라는 확인이 필요한 예외이다. 그래서 컴파일 타임에 해당 예외가 체크되어야 하고, 프로그래머에게 예외를 다루거나 throws exception같은 메소드를 선언 할 것을 요구한다(ex : FileNotFoundException)
Unchecked exceptions : 위와 다르게 발생한 예외를 확인해서 처리하라는 강제를 두지 않는다. 예외는 발생할 수 있지만 필요 없거나 어차피 네가 처리하지 못할 예외니 그냥 상위 caller로 던지라는 뜻. 계속 던지다 보면 JVM이 받아서 프로그램을 종료하던가, 처리한다(ex : NullPointerException)
Checked Exception : 반드시 로직을 try/catch로 감싸거나 throw로 던져서 처리해야함
Unchecked Exception : 명시적인 예외처리를 하지 않아도 됨
예외 복구 전략이 명확하고 그것이 가능하다면 Checked Exceptio을 try catch로 잡고 해당 복구를 하는 것이 좋다.
하지만 그러한 경우는 흔하지 않으며 Checked Exception이 발생하면 더 구체적인 Unchecked Exception을 발생시키고 예외에 대한 메시지를 명확하게 전달하는 것이 효과적이다.
ArrayList와 LinkedList는 장점은 어떤 경우에 누릴 수 있을까요
ArrayList는 인덱스를 통해 데이터를 검색할 때, LinkedList는 데이터의 추가, 삭제를 할 때 보다 간편하게 처리할 수 있읍니다.
넹 쉽게말해 ArrayList는 요소의 값을 수정하는데 빠르기 때문에, 그런 작업들이 많으면 쓰기 좋고 LinkedList는 중간에 요소를 추가하는 것이 빠르기 때문에, 그런 작업들이 많으면 쓰기 좋겠졍
ArrayList ArrayList는 내부적으로 데이터를 배열에서 관리하며 데이터의 추가, 삭제를 위해 임시 배열을 생성해 데이터를 복사 하는 방법 대량의 자료를 추가/삭제 하는 경우에는 그만큼 데이터의 복사가 많이 일어나므로 성능 저하가 올 수 있지만 각 데이터는 인덱스를 가지고 있기 때문에 한번에 참조가 가능해 데이터의 검색에는 유리함 시간복잡도 : O(1) 삽입 / 삭제 : O(1)
LinkedList LinkedList는 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태를 알고있다. 데이터의 추가, 삭제시 불필요한 데이터의 복사가 없어 데이터의 추가, 삭제시에 유리하지만 데이터의 검색시에는 처음부터 노드를 순회해야 하기 때문에 성능상 불리함 시간복잡도 : O(n) 삽입 / 삭제 : O(1)~O(n)