효뚜르팝의 Dev log
You don't know JS - Chapter 2 공부 기록하기 본문
함수
함수 선언(function declation)과 함수 표현식(function expression)의 차이
- 함수 선언 : 함수 a는 식별자 a와 실제 함수를 나타내는 값의 연관이 컴파일 단계에서 맺어짐
- 함수 표현식 : 함수와 함수 식별자가 코드가 실행되기 전까지는 관계를 맺지 않음
- JS에서 함수는 객체의 한 종류. 모든 프로그래밍 언어에서 함수를 값으로 취급하지는 않지만 JS 같이 함수형 프로그래밍 패러다임을 지원하는 언어에서는 함수를 값으로 취급하는 게 필수
- 함수는 값이므로 함수를 객체의 프로퍼티로 할당할 수 있다.
var whatTosay = {
greeting(){
console.log('안녕하세요!');
},
question(){
console.log('이름이 뭔가요?')
},
}
whatTosay.greeting(); // 안녕하세요!
비교
같음에 대한 고찰
- 일치 비교(equality comparison)와 동등 비교(equivalence comparision)의 차이를 알고 있어야 함.
- 일치 연산자(strict equality operator, ===)만으로는 아주 정확하게 비교 할 수 없음
NaN === NaN; // false
0 === -0 // true
[1,2,3] === [1,2,3] // false
(x => x * 2) === (x => x * 2) // false
- 일치 비교는 값의 본질(nature)이나 내용(content)를 비교함. 비교 대상이 객체인 경우에는 값의 본질이나 내용이 아닌 구조적 일치(structural equality)를 비교하게 됨
- JS에서는 객체끼리 비교할 때 비교 연산자가 구조적 일치를 판단하지 않고 대신 독자성 일치(identity equality)를 비교함.
- JS에서는 객체는 참조에 의해 고정되며 참조 복사본을 사용해 할당, 전달됨. 그리고 참조(독자성)를 대상으로 일치 비교가 일어남.
var x = [ 1, 2, 3 ];
// 참조를 복사한 값이 할당되기 때문에 변수 y는 x의 복사본이 아님.
// 변수 y는 x와 '같은' 배열을 참조함.
var y = x;
y === x; // true
y === [ 1, 2, 3 ]; // false
강제 변환 (coercion)
== 연산자와 === 연산자 비교
- 공통점 : 피연산자가 같은 타입이라면 완전히 동일하게 작동함.
- 차이점 : 피연산자 타입이 다른 경우 == 연산자는 비교 이전에 강제로 타입을 맞추는 작업을 수행한다는 점에서 === 연산자와 차이가 있음. 필자는 == 연산자를 느슨한 동등 비교 연산자가 아닌 강제 변환 동등 비교 연산자라고 설명하는게 적합하다고 생각한다고 함.
코드 구조화 패턴
클래스
- 상속(inheritance) : 클래스라는 독립된 논리적 공간에 데이터와 행동을 체계화할 수 있도록 만드는 강력한 도구. 자식 클래스는 부모 클래스의 데이터나 동작에 접근하거나 이를 사용하는 방식으로 부모 클래스와 협력함.
- 다형성(polymorhism) : 상속받은 메서드와 새롭게 정의한 메서드의 이름이 동일하고 공존할 수 있는 것
모듈
- 클래식 모듈 (ES6에서부터 추가됨)
- 단순한 함수이기도 하고 함수를 호출하면 모듈 인스턴스가 생성되기 때문에 모듈 팩토리(module factory)라고 설명하기도 함
- ES 모듈
- ES 모듈에는 모듈을 정의하는 래핑 함수가 없고 파일이라는 맥락에서 구현된다.
- 모듈 API와 직접 상호작용하지 않는다. export 키워드를 사용해 변수나 메서드를 퍼블릭 API로 정의한다.
- ES 모듈을 인스턴스화 하지 않아도 import 키워드를 사용해 가져오기만 한다면 단일 인스턴스처럼 사용할 수 있음.
'TIL' 카테고리의 다른 글
| [항해플러스] 4주차 회고 - 클린코드와 리팩토링 (0) | 2025.04.19 |
|---|---|
| You don't know JS Part 1 - Chapter 3 공부 기록하기 (0) | 2025.03.19 |
| You Don't Know JS 책 공부 시작 -! (0) | 2025.03.01 |
| 좋은 코드의 기준이란? feat. 토스 Frontend Fundamentals (4) | 2025.02.01 |
| PDF.js를 활용해 PDF 임베드하기: pdfjs-dist 사용법 (2) | 2024.11.27 |