jiseongkimu / java_test_1330

0 stars 0 forks source link

2020/09/16 ArrayList&LinkedList / checked, unchecked Exception #16

Open jiseongkimu opened 4 years ago

jiseongkimu commented 4 years ago

ArrayList ArrayList는 내부적으로 데이터를 배열에서 관리하며 데이터의 추가, 삭제를 위해 임시 배열을 생성해 데이터를 복사 하는 방법 대량의 자료를 추가/삭제 하는 경우에는 그만큼 데이터의 복사가 많이 일어나므로 성능 저하가 올 수 있지만 각 데이터는 인덱스를 가지고 있기 때문에 한번에 참조가 가능해 데이터의 검색에는 유리함 시간복잡도 : O(1) 삽입 / 삭제 : O(1)

LinkedList LinkedList는 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태를 알고있다. 데이터의 추가, 삭제시 불필요한 데이터의 복사가 없어 데이터의 추가, 삭제시에 유리하지만 데이터의 검색시에는 처음부터 노드를 순회해야 하기 때문에 성능상 불리함 시간복잡도 : O(n) 삽입 / 삭제 : O(1)~O(n)

jiseongkimu commented 4 years ago

Error

오류(Error) : 시스템 레벨의 비정상적인 상황이 생겼을 때 발생. 개발자가 미리 예측하여 처리할 수 없음 예외(Exception) : 개발자가 구현한 로직에서 발생. 발생 상황을 미리 예측하여 처리할 수 있음

Checked / Unchecked 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을 발생시키고 예외에 대한 메시지를 명확하게 전달하는 것이 효과적이다.

DaeAkin commented 4 years ago

ArrayList와 LinkedList는 장점은 어떤 경우에 누릴 수 있을까요

jiseongkimu commented 4 years ago

ArrayList는 인덱스를 통해 데이터를 검색할 때, LinkedList는 데이터의 추가, 삭제를 할 때 보다 간편하게 처리할 수 있읍니다.

DaeAkin commented 4 years ago

넹 쉽게말해 ArrayList는 요소의 값을 수정하는데 빠르기 때문에, 그런 작업들이 많으면 쓰기 좋고 LinkedList는 중간에 요소를 추가하는 것이 빠르기 때문에, 그런 작업들이 많으면 쓰기 좋겠졍