🔶 JavaScript

  • 블록문 내부에서 함수 선언문의 사용을 지양해야 하는 이유는 무엇인가?

: 브라우저별로 함수 선언문이 동작하는 방식이 다르기 때문
: 블록문 내부에서 꼭 함수를 정의해야 한다면 함수 선언문보다 함수 표현식 사용

  • 객체지향 프로그래밍의 단점은 무엇인가?

: 상속을 받아서 사용할 수 없는 프로퍼티와 메서드라면 undefined를 호출하기 때문에 에러가 발생할 수 있음
: 에러가 발생하면 그 밑의 코드는 실행되지 않고 종료되기 때문에 위험함

  • 메서드는 어떻게 생성하는 것이 바람직한가?

: 웬만하면 정적 메서드로 선언하는 것이 좋음
: 인스턴스 메서드로 생성하는 경우 인스턴스가 생성될 때마다 메서드도 함께 생성되어 메모리가 낭비될 뿐만 아니라 프로토타입 체인의 영향을 받기 때문에 함수 사용이 제한적임

  • 객체지향 프로그래밍과 함수형 프로그래밍의 차이는 무엇인가?

: 객체지향 프로그래밍에서는 메서드를 호출한 객체를 무조건 알고 있어야 하고 이 객체를 this로 바인딩함, 즉 함수 내부에서 반드시 this를 사용하게 됨
: 함수형 프로그래밍은 메서드에 참조할 객체를 인수로 받기 때문에 함수 내부에서 this를 사용하지 않음
: this는 함수 호출 위치에 따라 동적으로 바인딩되기 때문에 스코프가 꼬이거나 가독성을 해칠 우려가 있음, 그러므로 최근의 프로그래밍 패러다임이 함수형 프로그래밍을 지향하는 것

  • 프로토타입 교체는 바람직한가?

: 하지 않는 것이 좋음
: 프로토타입 교체를 하게 되면 객체지향 프로그래밍 패러다임을 너무 복잡하게 사용할 우려 존재, 즉 프로토타입 체인이 꼬이고 복잡해짐
: 프로토타입으로 상속을 구현한다면 1레벨 정도의 depth가 적당함

  • 생성자 함수와 클래스는 언제 유용하게 사용할 수 있는가?

: 자료 구조를 생성할 때 유용함, 자료 구조는 동일한 프로퍼티 구조가 여러 개 존재하기 때문

  • in 연산자와 for in문은 연산 결과에 어떤 차이가 있는가?

: for in문의 경우 프로퍼티 어트리뷰트 중 [[Enumerable]]의 값이 true인 것만 가져올 수 있지만, in 연산자는 [[Enumerable]]의 값에 상관없이 값을 반환함

  • in 연산자와 Reflect.has는 어떤 차이가 있는가?

: 동작은 동일함, 단지 Reflect.hasin 연산자의 함수 버전으로 새롭게 추가된 것

  • 2.toFixed()가 에러를 출력하는 이유는 무엇인가?

: 2라는 수 뒤에 오는 .을 자바스크립트 엔진은 소수를 나타내기 위한 것이라고 판단하기 때문에 파싱 에러 출력
: 이를 해결하기 위해 2(2)로 변경

  • 자바스크립트의 객체는 어떻게 분류할 수 있는가?

: 표준 빌트인 객체, 호스트 객체, 사용자 정의 객체

  • 표준 빌트인 객체는 무엇인가?

: ECMAScript 사양에 정의된 객체, 전역 객체의 프로퍼티로서 제공되어 실행 환경과 관계없이 언제나 어디서든 참조하여 사용할 수 있음

  • 호스트 객체는 무엇인가?

: ECMAScript 사양에 정의되어 있지 않고, 자바스크립트 실행 환경에서 추가로 제공하는 객체
: 브라우저 환경에서는 DOM, BOM, fetch 등 클라이언트 사이드 Web API가 해당되고, Node.js 환경에서는 고유의 API가 해당됨

  • 사용자 정의 객체는 무엇인가?

: 자바스크립트 엔진이 기본으로 제공하는 객체가 아닌, 사용자가 직접 정의한 객체

  • 원시값이 존재하는데도 String, Number, Boolean 같은 표준 빌트인 생성자 함수가 존재하는 이유는 무엇인가?

: 자바스크립트 엔진은 원시값에 객체처럼 접근했을 때 임시 객체인 래퍼 객체를 생성하여 사용할 수 있게 해주기 때문

  • 래퍼 객체는 무엇인가?

: 원시값에 마침표 표기법(.)이나 대괄호 표기법([ ])을 사용하여 객체처럼 접근하는 경우 자바스크립트 엔진이 빌트인 생성자 함수를 사용하여 임시로 생성하는 인스턴스를 말함
: 래퍼 객체를 통해서 원시값인데도 불구하고 임시로 빌트인 생성자 함수의 프로토타입에 존재하는 빌트인 메서드를 사용할 수 있게 됨

  • 빌트인 메서드 사용이 끝나면 래퍼 객체는 어떻게 되는가?

: 래퍼 객체가 생성될 때 내부 슬롯 [[StringData]], [[NumberData]] 등의 값으로 기존 원시값이 저장되는데, 메서드 사용이 끝나면 저장된 기존 원시값을 생성하고 식별자를 다시 바인딩하여 원시값으로 되돌려놓음
: 원시값으로 되돌려지면 래퍼 객체는 더 이상 참조되지 않기 때문에 가비지 컬렉터에 의해 메모리에서 제거됨

  • 래퍼 객체를 생성할 수 있는 원시값에는 무엇이 있는가?

: 문자열, 숫자, 불리언, 심벌만 해당
: null, undefined는 해당하지 않음

  • 전역 객체란 무엇인가?

: 코드가 실행되기 이전에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체
: 표준 빌트인 객체, 호스트 객체, var 키워드로 선언한 전역 변수, 전역 함수, 암묵적 전역을 프로퍼티로 가짐

  • 전역 객체는 프로토타입 체인 상에서의 최상위 객체인가?

: 전역 객체와 프로토타입 체인은 관계가 없음
: 단지 어떤 객체에도 속하지 않은 빌트인 객체(Object, Function 등)를 프로퍼티로 가지는 객체일 뿐임

profile
𝙸'𝚖 𝚊 𝚍𝚎𝚟𝚎𝚕𝚘𝚙𝚎𝚛 𝚝𝚛𝚢𝚒𝚗𝚐 𝚝𝚘 𝚜𝚝𝚞𝚍𝚢 𝚊𝚕𝚠𝚊𝚢𝚜. 🤔

0개의 댓글