자료구조
호이스팅
플랫폼
객체
인터페이스
Micro Service Architecture
일급 객체
리터럴
타입추론
약타입
강타입
Type Inference
Dynamic Typing
연결리스트
이진트리
Parameter & Argument
Function-level scope
Block-level scope
scope의 종류
프로그래밍에서 데이터를 구조적으로 표현하는 방식과 이를 구현하는 데 필요한 알고리즘에 대해 논하는 기초이론
모든 선언 구문이 코드의 최상단으로 끌어 올려 지는 현상
먼저 코드를 한번 보겠습니다.
해당 코드는 오류가 날까요? 정상적으로 실행 될까요?
console.log(result); // result 실행해줘
var result = 100; // result = 100 선언
콘솔에는 에러가 발생하지 않고 undefined
가 출력됩니다.
JS에서 이건 오류가 발생하지 않아요 호이스팅
때문이에요
JS는 2가지 Phase로 실행됩니다.
Creation Phase
- 모든 선언 구문을 찾아서 식별자를 메모리에 매핑(변수화) 시킵니다.
Execution Phase
- 처음으로 돌아가서 실행 구분을 찾아 실행 시킵니다.
var, let, const모두 hoisting이 적용 됩니다.(심지어 함수에서도)
다시 코드를 볼게요
1. Creation Phase
console.log(result);
var result = 100; // 선언 구분만 찾아서 변수화 합니다.
// result라는 변수가 있네! 까지 실행하고 이를 undefined로 저장해놔요
2. Execution Phase
console.log(result); // 실행구문을 실행해요 변수 result? 찾았다!
// undefined가 메모리에 저장되어 있네? 출력!
var result = 100; // 여기서 result에 100이라는 값이 할당되어요
지금까지는 var에 의해서 선언된 경우를 확인했어요.
하지만 let, const는 선언만 되고, 초기화가 되지 않으면
Temporal Dead Zon(TDZ)이 발생해서
초기화 하기 전까지는 사용할 수 없습니다.
1. Creation Phase
console.log(result);
var result = 100; // 선언 구문만 찾아서 변수화 합니다.
2. Execution Phase
console.log(result); // TDZ => error!!에 걸렸어요
// TDZ
var result = 100; // 여기서 초기화 하고부터 실행해야 오류가 나지 않아요
다른 프로그램을 실행시킬 수 있는 프로그램
Java는 플랫폼일까?
일급 객체는 다음의 4가지 조건을 충족하는 객체를 말합니다.
1. 익명의 literal로 생성이 가능 하다
2. 변수에 저장 될 수 있다
3. 함수의 인자로 전달 될 수 있다
4. 함수의 리턴값으로 사용될 수 있다
자바스크립트의 함수는 일급 객체의 조건을 충족합니다.
0부터 입력받은 수 까지 출력하는 repeat가 있었습니다.
우리는 repeat에 함수의 파라미터로 f를 넣어서
홀수를 출력하게 하거나, 전체를 출력하게 바꿀 수도 있습니다.
// 고차함수(Higher-Order Function)
// 근본이 되는 함수
function repeat(n, f) {
for (let i = 0; i <= n; i++) {
f(i);
}
}
// 콜백함수(callback function)
let printAll = function (i) {
console.log(i);
};
let printOdd = function (i) {
if (i % 2 == 1) {
console.log(i);
}
};
// parameter f의 자리에 어떤 함수(callback 함수)가
// 오는지에 따라 실행 결과가 달라집니다.
repeat(10, printAll); // 0부터 10까지 출력하게 됩니다.
repeat(10, printOdd); // 0부터 10까지의 홀수만 출력합니다.
예시에서 repeat(n, f) 함수는 parameter f를 함수로 받아
내부를 추상화
하였습니다.
f에 어떤 함수가 들어오는지에 따라 기존의 핵심 로직을 유지한 채로 내부의 실행 방식은 다르게 실행 할 수 있습니다.
이때 핵심 로직을 가진 함수를 고차함수
추상화 되어 리턴값에 영향을 끼치는 함수를 callback 함수
라고 합니다.
Parameter
- 함수의 정의할때 전달받은 인수를 함수 내부로 전달하기 위해 사용하는 변수를 말합니다.
Argument
- 함수를 호출할 때 함수로 값을 전달 해주는 값을 말합니다.
// x, y를 parameter라고 해요
function myFunc(x, y) {
return x + y;
}
// 10, 20은 argument라고 해요
myFunc(10, 20);
dynamic scope : 함수의 호출 위치에 따라 scope가 결정
lexical scope: 어디서 만들어졌는지에 따라서 scope가 결정