Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

효뚜르팝의 Dev log

You don't know JS - Chapter 2 공부 기록하기 본문

TIL

You don't know JS - Chapter 2 공부 기록하기

hyodduru 2025. 3. 11. 23:23

함수

함수 선언(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 키워드를 사용해 가져오기만 한다면 단일 인스턴스처럼 사용할 수 있음.