기술면접 스터디 4주차

유환익·2022년 5월 31일
0

함수와 일급 객체

일급 객체란?

일급 객체는 다음의 조건을 만족한다.
1. 이름이 없는 리터럴로 생성할 수 있다.
2. 변수나 자료구조(객체, 배열)에 저장할 수 있다.
3. 함수의 매개변수에 전달할 수 있다.
4. 함수의 반환 값으로 사용할 수 있다.

// 무명의 리터럴로 저장할 수 있고 변수에 저장할 수 있음
const increase = function (num) {
	return ++num;
}

const decrease = function (num) {
	return --num;
}

// 매개변수에 전달할 수 있음.
function makeCounter (predicate) {
	let num = 0;
    
    // 함수의 반환값으로 사용
    return function() {
    	num = predicate(num);
        return num;
    }
 }

자바스크립트에서 함수가 일급 객체라면, 일급 객체로 할 수 있는 것은?

일급 객체로서 함수가 가지는 가장 큰 특징은 일반 객체와 같이 함수의 매개변수에 전달될 수 있으며 함ㅅ의 반환 값으로 사용할 수 있다는 것. => 함수형 프로그래밍을 가능하게 한다.

함수형 프로그래밍이란?

외부 상태를 변경하지 않고 외부 상태에 의존하지 않는 함수를 순수함수라고 함. 순수 함수를 통해 사이드 이펙트를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이려는 프로그래밍 패러다임을 함수형 프로그래밍이라고 함.

순수 함수란? 일반 함수와의 차이점?

  1. 순수 함수: 어떤 외수 상태에 의존하지도 않고 변경하지도 않는 함수 => 사이드 이펙트가 없느 함수
  2. 비순수 함수: 외부 상태에 의존하거나 외부 상태를 변경할 수도 있는 함수

프로토타입

객체지향 프로그래밍이란?

객체지향 프로그래밍은 프로그램을 명령어 또는 함수의 목록으로 보는 전통적인 명령형 프로그래밍의 절차지향적 관점에서 벗어나 여러 개의 독립적 단위 즉 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임이다.

객체지향 프로그래밍의 특징이란?

  1. 추상화
  • 객체를 구성할 수 있는 다양한 속성 중에서 프로그램에 필요한 속성만 간추려 내어 표현하는 것
  1. 캡슐화
  • 데이터 구조와 데이터를 다루는 방법들을 목적에 따라 결합시켜 묶는 것
  • 데이터를 외부가 아닌 함수를 통해서 접근하게 하는 방식
  1. 상속
  • 상위 개념의 특징을 하위 개념이 물려받는 것
  1. 다형성
  • 부모클래스에서 물려받은 가상함수를 자식클래스 내에서 오버라이딩(재정의)되어 사용되는 것

자바스크립트는 객체지향 프로그래밍인가?

자바스크립트는 객체지향 프로그래밍 뿐 아니라 명령형, 함수형 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어. 객체지향 프로그래밍에서 프로토타입 기반의 객체지향 프로그래밍 언어이다.

프로토타입이란?

자바스크립트에서 객체를 만들기 위해서 객체 자신을 만드는 데 사용되는 원형인 프로토타입 객체를 사용하여 객체를 생성 => 이때 만들어진 객체 안에 __proto__ 속성이 자산울 만들어낸 원형을 의미하는 프로토타입 객체를 참조하는 링크가 숨겨져 있음. 이 숨겨진 링크를 프로토타입이라고 한다.

strict mode

strict mode란?

오타나 문법 지식의 미비로 인한 실수를 줄여 안정적인 코드를 생산하기 위해 ES6에 추가된 모드.
strict mode는 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다.

strict mode를 통해 예방할 수 있는 것

  1. 암묵적 전역
  2. 변수, 함수, 매개변수의 삭제
  3. 매개변수 이름의 중복

빌트인 객체

빌트인 객체란? 종류는?

개발자가 모든 기능을 구현하지 않고, 편하게 개발할 수 있도록 자바스크립트에서 기본적으로 제공하는 객체
자바스크립트에서 객체는 크게 3개의 객체로 분류할 수 있음

  1. 표준 빌트인 객체
  • 자바스크립트에서 기본적으로 제공하는 ECMAScript 사양에 정의된 표준 객체. 애플리케이션 전역의 공통 기능을 제공
  • 전역 객체의 프로퍼티로써 제공됨. 따라서 별도의 선언없이 전역 변수처럼 언제나 참조 가능.
  • new 연산자를 사용하여 표준 빌트인 객체와 결합하여 선언하면, 생성된 인스턴스로 하여금 해당 함수에 내장된 프로토 타입 메서드를 이용할 수 있음.
  1. 호스트 객체
  • ECMAScript 사양에 정의되어 있지 않지만 자바스크립트 실행 환경(브라우저 혹은 Node.js)에서 추가로 제공하는 객체
  • 브라우저 환경: DOM, BOM, Canvas, XMLHttpRequest, fetch, Web Storage, Web Component와 같은 클라이언트 사이드 Web API를 호스트 객체로 제공
  1. 사용자 정의 객체
  • 표준 빌트인 객체와 호스트 객체처럼 기본 제공되는 객체가 아닌 사용자가 직접 정의한 객체

래퍼 객체란?

래퍼 객체는 원시 타입을 마치 객체 타입처럼 사용하는 과정 속에서 생기는 임시 객체. 원시 타입인 Number, String, Boolean으로 특정된다.

이는 원시값인 문자열, 숫자, 불리언 값의 경우 이들 원시값에 대해 마치 객체처럼 닷(.)노테이션 표기법으로 접근하면 자바스크립트 엔지이 일시적으로 원시값을 연관된 객체로 변환해주기 때문이다.

즉, 원시값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 되돌린다.

this

this란?

  • this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수이다.
  • this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조할 수 있다.
  • this는 자바스크립트 엔진에 의해 암묵적으로 생성되며, 코드 어디서든 참조할 수 있다.
  • 단, this가 가리키는 값, 즉 this 바인딩은 함수 호출 방식에 의해 동적으로 결정된다.

this 바인딩이란?

바인딩이란 식별자와 값을 연결하는 과정을 의미.
예를 들어, 변수 선언은 변수 이름(식별자)과 확보된 메모리 공강의 주소를 바인딩하는 작업.
this 바인딩은 this(키워드로 분류되나 식별자 역할)와 this가 가리키는 객체를 바인딩하는 것

this가 바인딩되는 객체의 차이

  • 일반 함수 호출 : 전역 객체(window/global) 바인딩
  • 콜백 함수 호출 : 전역 객체(window/global) 바인딩
  • 내부 함수 호출 : 전역 객체(window/global) 바인딩
  • 메서드 호출 : 메서드를 호출한 객체
  • 생성자 함수 호출 : 생성자 함수가 생성할 인스턴스
  • Function.prototype.apply/call/bind 메서드에 의한 간접 호출: 메서드에 첫번째 인수로 전달한 객체
profile
사용자의 편의를 더 생각하고 편안한 UI/UX 개발을 꿈꾸는 프론트엔드 개발자 지망생입니다.

0개의 댓글