3일차 - 알고리즘2, 예외처리, 모듈


추후에 정리가 필요한 문서입니다!!!

3일차

  1. 조시옷님의 알고리즘 강의 part2
  2. 안시옷님의 예외처리, 모듈

알고리즘 강의

1. Linked List(연결리스트)

배열처럼 선형적인 구조를 갖고 데이터들을 담을 수 있다.

한 칸 한 칸을 Node라고 한다. 이 노드 하나에는 데이터와 포인터(next)가 들어있다.

배열은 가운데 요소 중 하나를 추가하거나 삭제할 때 메모리 낭비가 있는데,

링크드리스트는 삽입을 하면 포인터가 가리키는 주소값만 바꿔주면 된다.

코드가 복잡하고 , 포인터라는 공간을 따로 할당해주어야한다. 작지만 포인터라는 메모리가 소모되게된다.

제일 큰 단점 !! 탐색이 아주 구리다. 중간에 있는 요소를 찾으려면 제일 첫번째 요소로 가서 주소를 타고 타고 .. 찾아야한다.

배열은 탐색이 좋고, 링크드리스트는 추가 삭제가 유연하다

배열은 배열의 길이만큼 연속적인 메모리를 먹는데 링크드리스트는 연속적인 메모리가 필요하진 않다.

어느 노드를 보고 있는지 head로 알 수 있다. head는 여러개를 둘 수 있다.

예외처리 (Exception / Error handling)

  • 예외 처리란 간단히 말하자면 프로그램이 실행되는 동안 어떤 문제가 발생한 경우에 프로그램이 중단되지 않고 대처할 수 있도록 처리하는 것을 예외 처리(Exception Handling)라고 합니다.

  • 코드적으로는, 프로그램 실행 중에 발생하여 일반적인 코드의 실행 흐름에 영향을 주는 오류들을 예외(Exception)라고 하는데, 예외 처리란 이와 같은 예기치 못한 예외가 발생했을 때 전체 코드를 중단시키지 않고 어느 시점에서부터 다시 원하는 코드로 실행 흐름을 복구할 수 있는 작업을 예외 처리라고 할 수 있습니다.

NOTE: 프로그래밍에서의 에러는 세가지로 나뉠 수 있는데, 이때 자바스크립트에서의 예외란 런타임 에러 혹은 사용자가 생성한 에러를 지칭합니다.

-문법 에러 (syntax error / parsing error): 프로그래밍 언어의 문법에 맞지 않아 발생하는 에러.

console.log(; // 괄호 생략 오타 // 문법 에러

-런타임 에러: 문법에 어긋나지는 않지만 실행 시 오류를 발생시키는 에러.

const a = variable;
console.log(b); // ReferenceError: b is not defined

-논리적 에러 (semantic error): 디버깅하기 넘나 어려운 에러. 문법에도 맞고, 실행 시 오류도 발생시키지 않지만 내가 원하는대로 동작해주지 않는 에러. 대부분 로직 작성이 잘못되어 발생하는 에러들입니다.

try-catch-finally 구문

코드 실행 중에 에러가 발생하면, 코드의 실행이 중단되어 그 시점에 실행 중이었던 작업을 완료할 수 없게 됩니다. JavaScript는 이로부터 코드의 실행 흐름을 원상복구할 수 있는 기능을 제공하며, try-catch-finally 구문을 사용하면 에러가 나더라도 코드의 실행을 지속할 수 있습니다.

try-catch의 기본 생김새는 이렇게 생겼습니다.

try {
  // ...
} catch (e) {
  // handling code
}

try-catch 구문의 실행 방식

try 블록 내부의 코드들을 실행합니다. 에러가 발생하는 순간 아직 실행되지 않은 나머지 코드들을 무시한채 catch 블록으로 실행 흐름을 옮깁니다. catch 블록으로 실행 흐름을 복구하여 그 속의 코드를 실행합니다.

모듈