5. 데이터 처리
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