자바스크립트 정리

5. 데이터 처리

알럽유 2023. 7. 12. 10:58
728x90
반응형

flow control (제어흐름, 흐름제어)

▶명령형 프로그램의 개별 명령문, 명령 또는 함수 호출이 실행되거나 평가되는 순서

▶5가지 제어흐름의 종류

제어흐름의 종류

▶goto            다른 구문에서 시작

▶choice         일부 조건이 충족되는 경우에만 일련의 명령문 실행                  If-else, switch

▶loop             어떤 조건이 충족될 때까지 일련의 명령문을 0회 이상 실행      Collection loop, General loop

▶continue      현재 실행 구문에서 떨어진 한 구문의 집합을 실행                    Loop continuation

▶break           프로그램 실행을 중단                                                                Loop early exit, 함수 실행정지

 

조건문

▶일부 조건이 총족되는 경우에만 일련의 명령문 실행

if - else

▶논리조건의 참/거짓에 따라 명령문을 실행해야 할 경우 사용

▶if문의 논리조건에는 true, false로 평가 할 수 있는 표현식을 대입 가능

▶논리조건이 참인 경우,if 블럭문 실행

▶논리조건이 거짓인 경우,else 블럭문을 실행

▶해당 값은 false로 평가

      ▶false, undefined,null,0, NUN \

else if절을 사용하여 다수의조건을 순차적으로 검사할 수있다.

switch문

▶switch에 명시된 표현식을 평가한 후, 평가된 값과 cass 라벨 값을 비교하여 일치하는 cass의 명령문을 실행

▶default 작성

     ▶평가된 값에 해당하는 cass문이 없을 경우 default의 명령문이 실행되도록

▶switch와 표현식을 작성

    ▶라벨이 포함된 cass절을 작성

    ▶switch (표현식) {

            cass 라벨:

                  ...명령문...

             defult:

                  ...명령문... 

          }

▶defult문은 라벨없이 작성한다.

조건부 loop

대부분의 프로그래밍 언어에는 일부 조건이 변경될 때 까지 루프를 반복하는 구조가 있다.

▶시작할 때 조건을 평가하는 타입

    ▶본문 생략 가능

▶마지막에 조건을 평가하는 타입

    ▶본문은 항상 한번 이상 실행

조건부 loop - while문

▶시작할때 조건을 평가하는 타입

    ▶본문 생략가능

▶while문

    ▶while(표현식) {

              ...명령문...

           }

조건부 loop - do...while문

▶마지막 조건에 조건을 평가하는 타입

    ▶본문은 항상 한번 이상 실행

▶do...while문

    ▶do  {

                   ..명령문..

       }  while(표현식);

조건부 loop - 주의 사항

▶종료될 수 있는 조건이 아닌 경우, 무한 루프에 빠질수 있다.

▶조건문 작성시 주의 해야한다.

for loop

▶특정 부분의 코드가 반복적으로 수행 될 수 있도록 한다.

▶언어별로 지원하는 형식이 있다

    ▶[초기화-조건식-증감문]의 형식

    ▶집합 loop 형식 (Foreach loop)

[초기화-조건식-증감문]의 형식

▶C언어에서 유래한 문법

▶while문과 다르게, 해당 루프와 관련된 loop가 존재

    ▶loop변수의 비교 및 증감을 위한 별도 문법을 명시 필요

    ▶==loop 변수를 활용하여 명시적으로 카운트를 관리 필수

▶for([초기문]; [조건문]; [증감문];){...}

    ▶세미클론으로 구분한다.

▶초기문: loop내에서 사용할 loop변수를 초기화

▶조건문: loop내 코드 실행전, 조건을 평가하여 loop를 지속할지 판단

▶증감문: loop내 코드 실행후, 실행되는 문장(루프 증감 용도)

collection loop(Foreaach 루프)

▶컬렉션 안의 항목들을 횡단하는 제어흐름문

▶for문과 다르게, 명시적으로 카운터(루프변수)를관리하지 않는다.

▶잠재적인 순환 횟수 오류를 예방한다(off-by-one error)

    ▶코드를 더 단순하게 읽힐 수 있게 해준다

▶자바스크립트 collection loop

    ▶for...of

    ▶for..in

collection loop - for...of문

▶반복 가능한 객체(iterator)를 통해 반복하는 루프를 만든다.

▶for([변수]of[objct]){...}

    ▶변수는 반복 가능한 객체의 값을 반환한다.

    ▶반복 가능한 객체: Array, Set, String

collection loop - for...in문

▶객체의 열거속성(enumerable)을 통해 지정된 변수를 반복한다.

▶for([변수]in[obejct]){...}

    ▶변수는 객체의 key값을 반환한다

break문

▶제어흐름의 종류 중 프로그램 실행 중단 종류

▶반복문, switch문을 종료 시킬때 사용

▶가장 가까운 while,do-while,for,switch 문을 종료하고, 다음 명령어로 넘어간다.

continue문

▶제어흐름의 종류 중 현재 실행 구문에서 떨어진 한 구문의 집합을 실행 종류에 속한다.

▶while, do-while, for문을 둘러싼 반복을 종료하고, 다음 loop를 실행한다

▶전체 루프 실행을 종료하지 않는다.

    ▶while: 조건문으로 이동

    ▶for: 증감문으로 이동

예외 상황 Exception

▶런타임 때 발생 할 수있는 의도치 않은 상황을 뜻한다.

▶흐름 제어 시 발생할 수 있는 예외 상황이므로, 이를 이해하여 코드 레벨에서 대응해야 한다.

    ▶handling: 대응한다는 의미

    ▶control: 예상하고 직접 조작한다는 의미

▶예외상황을 핸들링 하지 않는다면, 기능이 동작하지 않거나, 어플리케이션이 shout down 될 수 있다.

예외의 원인

언어레벨 ~ 외부 요인에 의한 예외 상황까지 다양하다.

▶코드레벨에서의 문제

▶하드웨어, 디바이스의 문제

▶라이브러리 손상

▶사용자의 입력 실수

▶...

예외의 종류

▶ECMAScript Error : 자바스크립트 언어에서 발생하는 Error Type

▶DOMException: Web API 레벨에서 발생하는 Error Type

▶그 외 예외 

예외의 종류 - ECMAScript Error

자바스크립트 언어에서 발생하는 Error Type

▶Range Error 값이 집합에 없거나, 허용범위가 아닐 때

▶Reference Error 존재하지 않는 변수 참조 시

▶SYntaxError 문법을 지키지 않았을때

▶TypeError 값이 기대한 자료형이 아니여서 연산이 불가능 할때

▶ .... 

예외의 종류 - DOMException

Web API 레벨에서 발생하는 ErrorType

▶NetworkError 네트워크 에러 발생 시

▶AbortError 작업이 중단되었을 때

▶TimeoutError 작업 시간이 초과되었을 때

▶...

예외의 종류 - 그외

▶개발자도 예상치 못한 예외 상황

▶개발자가 직접 예외 상황을 예상하여 핸들링 할 수 있다.

▶자바스크립트의 Error 객체를 사용하여 직접 에러를 정의내리고 핸들링 할 수 있다.

throw문

예외를 발생시킬때 사용

▶catch블럭에서 에러 객체 핸들링

 

예외가 발생하면,

1. 현재 함수의 실행이 중지

2. 에러객체와 함께 에러가 throw

3. 제어흐름은

    ▶호출자 사이에 catch블록이 있으면, catch블록으로 전달

    ▶호출자 사이에 catch블록이 없으면, 프로그램 종료

▶예외를 발생시키기 위하여 throw문을 사용한다

    ▶throw 표현식

▶throw문 이후에 명령문은 실행되지않는다

Error 객체

▶사용자가 직접 Error객체를 정의하여 사용할 수있다.

    ▶newError("에러 메세지")

    ▶Error.message

    ▶Error.name

▶ECMAScript 표준 내장 오류 유형이 있다.

에러 catch

예외가 발생하면

1. 현재 함수의 실행이 중지

2. 에러객체와 함께 에러가 throw

3. 제어흐름은

    ▶호출자 사이에 catch블록이 있으면,catch블록으로 전달

    ▶호출자 사이에 catch블록이 업으면, 프로그램 종료

▶에러를 catch하여 프로그램이 종료되지 않도록 해야한다.

▶예외 처리를 담당하는 핸들러를 찾기 위해, 순서대로 콜스택을 거슬러 올라가

    올바른 핸들러를 찾아내어 그 곳에서 처리되도록 한다.

콜 스택 call stack

▶스택 자료구조

    ▶출입구가 하나인 데이터 구조(First in Last out)

▶Cass stack

    ▶자바스크립트 코드가 실행되며 생성되는 실행컨텍스트를 저장하는 자료구조

    ▶함수를 호출할 때 마다 스택이 쌓이고, 함수의 실행이 종료되면, 콜스택에서 스택을 제거하는 원리

▶에러 throw되면

    ▶콜 스택을 확인하여, 핸들링하고 있는 catch문이 있는 스택에서 처리

try...catch문

▶try...catch문은 블록문 내에서 예외가 발생할 경우, 예외처리를 맡은 하나 이상의 반응 명령문을 지정합니다.

    ▶try블록의 명령문중 하나가 실패하면 catch로 제어권이 넘어간다.

    ▶try블록의 명령문중 하나가 성공하면 catch로 제어권이 넘어가지 않는다.

▶catch블록에서 인자로 throw된 catchID를 참조할 수 있다.

    ▶try{...}

    ▶catch(catchID){....}

▶콜스택 중 하나에서 catch문에서 예외가 처리된다면, 더상위의 콜 스택에서는 더이상 예외가 타고 올라오지 않는다.

try...catch문의 finally블록

▶finally블록은 try블록에서 예외 상황이 발생하지 않더라도, 실행된다

▶예외상황이 발생되면: try-> catch -> finally

▶예외상황이 발생되지 않으면: try-> finally