1. 직장인과 학생의 차이
- 복잡성을 정복할 수 있는가?
- 프로그램은 무조건 변화는데 변화에 따라 적용할 수 있는가?
2. 프로그램이 무엇인가?
- LANGUAGE CODE
- 고급언어로 작성한 코드
- LINT TIME이라고 부른다(고급언어로 작성했는데도 이상하게 작성되면 에러가 발생)
- MACHINE LANGUAGE
- COMPILE TIME => 컴퓨터가 이해할 수 있는 언어로 변환 / 이상하면 에러가 발생
- 모든 LANGUAGE CODE를 읽어서 빠짐없이 MACHINE LANGUAGE로 바꾼다.
- FILE
- MACHINE LANGUAGE로 만든 파일
- LOAD
- 메모리에 파일을 올라간다 실행되지 전 상태(이때! 프로그램이라고 부를 수 있다.)
- RUN
- RUN TIME => 작동 중 에러가 발생한다.
- TERMINATE
- 예외사항
- 프로그램이 종료가 될때까지 에러가 발생하지 않지만 결과가 이상하다 (나의 월급이 반으로 들어온다)
- CONTEXT ERROR 특정사항에서 에러가 발생
- 결론 : 최대한 앞 단계에서 에러를 잡는게 리소스가 적고 사태를 수습하기에 좋다
3. 런타임 스크립트(예 자바스크립트)
- LANGUAGE CODE
- Javascript로 작성
- LINT TIME이라고 부른다.(고급언어로 작성했는데도 이상하게 작성되면 에러가 발생)
- FILE
- .js 파일
- LOAD
- 브라우저에서 파일을 로드에서 실행시켜준다.
- MACHINE LANGUAGE
- AUTO COMPILE TIME => 컴퓨터가 이해할 수 있는 언어로 변환 / 이상하면 에러가 발생
- 하지만!! 모든 파일을 바꿔주는게 아니라 필요한 부분만 바꿔주고 실행시켜 준다
- RUN
- RUN TIME => 작동 중 에러가 발생한다.
- 해당 함수를 호출하거나 실행했을떄만 에러를 찾을 수 있어 개발자의 책임이 커졌다.
- TERMINATE
4. 런타임 스크립트는 LINT와 RUN 타임만! 오류를 잡을 수 있나?
- 런타임 에러는 감지하고 고치기에는 어렵다.
- 하지만 런타임 에러를 레이어별로 나눠 어느 부분의 에러인지 확인해서 수정할 수 있다.
DECLARE BASE FUNCTION, CLASS ... 기저가 되는 함수나 클래스정의
STATIC TIME
-------------------------------------
RUN TIME
DECLARE EXTENDED FUNCTION, CLASS ... 기저가 되는 함수나 클래스 응용 정의
STATIC TIME
-----------------------------------
RUN TIME
USE FUNCTION, CLASS ... 진짜로 사용하는 함수나 클래스
- 결론 : 복잡성을 잡을려면 격리(이 일에 대한 누가 책임을 지는지)시켜 에러의 위치를 찾아준다
5. 자바스크립트의 구성요소
-
LEXICAL GRAMMAR(언어적 문법)
- CONTROL CHARACTER
- WHITE SPACE
- LINE TERMINATORS
- COMMENTS
- KEYWORD : 예약어
- LITERALS : 값을 최소한으로 표현 (예 : 23을 표현하는 것은 23(o) / 10+13(x))
-
LANGUAGE ELEMENT
- 개발언어의 특징은 언어의 설계자의 의도로 만들어진 언어이기 떄문에 이해하기 보다는 받아들여야한다
- STATEMENTS : 엔진이 어떻게 실행할지 힌트를 주는 것
- 공문
- 식문
- 제어문
- 선언문
- 단문
- 중문
-
EXPRESSION : 최종적으로 하나의 값으로 표현되는 것, 하지만 값을 별도의 메모리에 저장하지 않는다면 일회용
- 값
- 연산식
- 호출식
-
IDENTIFIER : 변수는 메모리의 위치와 해당 값의 타입을 가지고 있다.
- 기본형 : 자바스크립트 만들떄, 기본형만 값이 복사되는 것으로 정하고 그외는 주소값을 전달함
- 참조형 : 해당 메모리에 값 대신 주소가 있으면 컴퓨터는 그 주소로 이동해서 값을 가져온다.
6. 컴퓨터 이론
- 컴퓨터는 단순히 정의하고 반복
- 메모리의 명령어를 cpu로 옮겨서 실행결과를 다시 메모리에 적재하는걸 끊임없이 하는한다라고 정의(폰 노이만)
- 노이만 머신 이론이라고 정의한다.
- 명령어가 소비를 하면 프로그램이 종료가 된다(중간에 방해하지 못한다.)
- 연산자 우선순위보다는 무조건 괄호를 활용하거나 함수로 만든다 => 복잡성을 정복하려면 확실한 코드 작성
7. 플로우
- 메모리의 명령어가 다 실행되는것을 하나의 플로우(동기적인 작업)
- 이러한 플로우를 컨트롤 하고 싶다 => 제어문을 활용하여 플로우를 컨드롤 한다.
- 이러한 플로우의 정확한 명칭
SYNC FLOW
- 제어문을 통해 플로우를 컨트롤 하는 것을
SYNC FLOW CONTROL
SUB FLOW
메인 플로우에서 서브 플로우로 갔다가 다시 메인 플로우로 돌아오는 플로우- 이러한 한 플로우를
ROUTINE
- 이러한 서브 플로우 하나를
SUB ROUTINE
= 함수나 제어문
8. 제어문
- 자바스크립트 엔진에게 힌트를 주기위해 사용된다.
- IF 문 하나이면 Optional => 그 플로우를 타도 되고 안 타도 가능
- IF ELSE문은 Mandatory => 둘중 하나의 서브 플로우를 타야하기 떄문
- ()란 1. 산술연산자 우선순위 2. 제어문 형식 기호 3. 함수를 호출할떄 호출식 연산자