🔶 JavaScript

  • 제어문을 사용하여 코드의 실행 흐름을 제어하는 결과가 바람직한가?

: 순차적으로 코드를 읽어내리는 것이 가독성에 더 좋음, 가독성을 해치기 때문에 바람직하지 않음
: if 문도 if else처럼 조건을 많이 붙이는 방식은 좋지 않고, if 문 내부에서 return 키워드로 반환하는 방식이 바람직함
: for 문 역시 ( ) 안에 문이 3개나 들어있고 가독성이 좋지 않음, 그러므로 최대한 for문 대신에 map, filter, reduce과 같은 고차 함수를 사용하는 것이 바람직함

  • 식별자란 무엇인가?

: 값을 식별하기 위한 고유 이름
: 변수 이름, 함수 이름, 클래스 등 값을 가져올 수 있는 포괄적인 개념으로 사용 가능

  • String, Number 등 생성자 함수로 명시적 타입 변환을 하는 방식이 왜 바람직하지 않은가?

: String, Number와 같은 생성자 함수는 원래 객체를 생성하기 위한 목적으로 사용하는 것이지 타입 변환을 위해 사용하지 않음, 즉 함수의 목적에 맞게 사용하지 않음

  • 원시 값은 왜 불변하게 설계되었는가?

: 원래 있던 값을 지우고 새로 쓰는 것보다, 새로 할당한 값에 메모리 주소만 바꿔주는 것이 더 효율적이기 때문

  • 객체 값은 왜 가변적으로 설계되었는가?

: 객체가 원시 값처럼 동작하면 객체 내용을 바꾸는 순간 새로운 객체가 생성되어야 하는데, 그 객체의 생성 비용이 원시 값 생성 비용보다 훨씬 큼

  • 함수형 프로그래밍에서 불변 객체를 사용하려는 이유는 무엇인가?

: 외부 상태에 영향을 주지 않고 순수 함수를 지향하기 위해서

  • 얕은 복사를 하는 방식에는 무엇이 있는가?

: 예전에는 slice 함수 사용하여 가능
: 요즘에는 ... 사용하여 가능

  • 대부분의 프로그래밍 언어에서 깊은 복사와 관련된 메서드를 구현하지 않은 이유는 무엇인가?

: 깊은 복사는 중첩 구조가 많은 경우 남용하여 사용하면 메모리가 낭비될 수 있기 때문

  • 함수란 무엇인가?

: 입력, 출력 과정을 문으로 구현하고, 이것을 코드 블록으로 감싼 하나의 실행 단위
: 함수의 구성 요소로 매개변수, 인수, 반환값, 함수 이름이 존재함

  • 매개변수란 무엇인가?

: 함수 내부로 입력을 전달받는 변수

  • 인수란 무엇인가?

: 함수의 입력을 의미함

  • 반환값이란 무엇인가?

: 함수의 출력을 의미함

  • 함수 이름이란 무엇인가?

: 값인 함수를 구별하기 위해서 식별자처럼 사용, 함수 몸체 내부에서만 참조 가능

  • 함수 호출이란 무엇인가?

: 정의한 함수를 실행하는 행위
: 매개변수를 함수에 전달하여 함수 실행을 명시적으로 지시
: 함수를 호출하면 코드 블록의 문이 실행되고 반환 값을 반환함

  • 함수는 왜 사용하는가?

: 동일한 작업이 반복적으로 수행된다면 이를 함수로 만들어서 코드를 재사용할 수 있음
: 코드를 재사용하면 수정하는 횟수가 줄어들기 때문에 유지보수가 편해짐
: 함수는 값이기 때문에 식별자를 붙여서 역할을 쉽게 파악할 수 있으므로 사용하면 코드 가독성이 향상

  • 함수 리터럴이란 무엇인가?

: 사람이 알아볼 수 있는 방식으로 함수를 생성하는 방법, 표기법
: 리터럴이므로 객체 값으로 평가될 수 있음, 그러므로 함수는 객체
: 함수 이름, 매개변수 목록, 함수 몸체로 구성되어 있음

  • 일반 객체와 함수의 차이는 무엇인가?

: 일반 객체는 호출할 수 없지만, 함수는 호출할 수 있음
: 입출력 과정을 통해 반환 값을 만들어서 반환한다는 점에서 일반 객체와 차이
: 함수 객체는 고유한 프로퍼티를 가짐

  • 함수 정의란 무엇인가?

: 함수 호출 이전에 매개변수, 실행할 문들, 반환할 값을 지정하는 것
: 정의된 함수는 자바스크립트 엔진에 의해 평가되어 함수 객체가 됨

  • 함수를 정의하는 방식에는 무엇이 있는가?

: 함수 선언문, 함수 표현식, Function 생성자 함수, 화살표 함수

  • 변수는 선언한다고 표현하고 함수는 정의한다고 표현하는데, 선언과 정의의 차이는 무엇인가?

: 선언은 사용한다는 사실을 알리는 것, 정의는 선언과 할당까지 겸해서 그 구체적인 내용까지 포함하는 것

  • 함수 선언문을 사용할 때 주의할 점은 무엇인가?

: 무조건 기명 함수 리터럴 방식을 사용해야 함
: 함수 리터럴을 변수에 할당하지 않으면 자바스크립트 엔진이 함수 이름과 동일한 식별자를 암묵적으로 생성하고, 거기에 함수 리터럴을 할당함
: 만약 함수 이름이 없다면 자바스크립트 엔진이 식별자를 생성하지 못하기 때문에 함수를 호출할 수 없음

  • 자바스크립트 엔진은 함수 선언문을 어떻게 해석하는가?

: 소스 코드 평가 과정에서 함수 객체를 생성하고, 함수 이름과 동일한 식별자에 생성한 함수 객체를 할당함
: 그래서 함수 선언문 이전에 호출하면 호출 가능함

  • 함수 표현식은 무엇인가?

: 함수 리터럴로 생성된 함수 객체를 변수에 할당하는 방식
: 표현식의 경우 애초에 변수에 함수 객체를 할당하므로 함수 이름의 생략 가능, 즉 익명 함수 방식으로도 리터럴 사용 가능함

  • 자바스크립트 엔진은 동일한 함수 리터럴을 어떻게 함수 선언문과 함수 표현식으로 구분하여 해석하는가?

: 값으로 평가될 수 있는지 아닌지 문맥에 따라 구분
: 연산자를 사용하거나 변수에 할당하여 값으로 평가될 수 있다면 함수 표현식으로 해석, 단독으로 사용되어 값으로 평가될 수 없다면 함수 선언문으로 해석

  • 함수 선언문과 함수 표현식의 함수 생성 시점은 어떻게 다른가?

: 함수 선언문은 소스 코드 평가 과정 중 식별자에 함수 객체가 할당되는 시점에서 함수가 생성되어 함수 선언문 이전에도 호출할 수 있음
: 함수 표현식은 소스 코드 평가 과정 중 변수 선언과 동일하게 할당된 식별자가 선언되어 undefined로 초기화되는 과정을 거치고, 런타임 시 함수 리터럴로 생성된 함수 객체가 할당되어 함수 표현식 이전에는 호출할 수 없음

  • Function 생성자 함수는 일반 함수와 어떻게 다른가?

: 일반 함수처럼 클로저가 생성되지 않기 때문에 일반적으로 정의한 함수와는 다르게 동작

  • 화살표 함수는 일반 함수와 어떻게 다른가?

: 항상 익명 함수로 정의
: 기존의 함수 정의 방식보다 간략하게 정의할 수 있는데, 단순히 표현만 간략한 것이 아니라 함수의 내부 동작 역시 간략함

  • 함수는 어떻게 호출하는가?

: 함수 객체를 할당한 식별자와 ( )(함수 호출 연산자)를 사용하여 호출
: 함수를 호출하면 현재 실행 흐름을 중단하고 호출된 함수로 실행 흐름이 옮겨짐

  • 함수의 매개변수는 어떤 규칙을 가지는가?

: 매개변수는 함수 몸체 내부에서만 참조 가능, 외부에서 참조 불가능
: 인수가 부족해서 할당되지 않은 매개변수는 undefined로 처리
: 매개변수보다 인수가 더 많으면 초과된 인수는 무시되지만, arguments 객체 내부에 저장되어 사용할 수는 있음

  • 함수에서 인수의 타입을 어떻게 확인할 수 있는가?

: 자바스크립트는 동적 타이핑 언어이므로 매개변수에 전달한 후에 타입 확인이 가능하기 때문에 조건문으로 확인 가능, 만약 타입이 다르면 에러를 출력하게끔 설정할 수 있음

  • 이상적인 매개변수 지정 방식은 무엇인가?

: 명시적으로 매개변수의 개수를 제한하지 않지만, 매개변수는 순서가 중요하므로 인수 전달 시 복잡해지기 때문에 최대한 적은 개수를 사용하는 것이 좋음
: 순서를 고려하지 않고 매개변수를 선언하고 싶다면 인수로 객체를 전달할 수 있음

  • 함수의 반환문은 어떤 역할을 하는가?

: 반환문이 등장하면 함수 실행을 중단하고 반환문 이후의 문은 무시됨
: return 키워드 뒤의 표현식을 평가하여 반환, 이때 표현식을 지정하지 않으면 undefined 반환함

  • 함수의 반환문을 작성할 때 주의할 점은 무엇인가?

: 반환문 사용 시 줄바꿈을 임의적으로 추가하면, 세미콜론 자동 삽입 기능 때문에 의도치 않은 결과가 발생할 수 있음

  • 매개변수로 객체를 전달하면 어떤 부수 효과가 발생할 수 있는가?

: 객체 타입은 참조 값이 매개변수로 전달되므로, 인수로 전달한 외부의 객체와 매개변수로 전달된 내부의 객체가 동일한 참조 값(메모리 주소)을 가짐, 이때 내부의 객체를 변경하면 외부의 객체도 변경되는 부수 효과 발생

  • 즉시 실행 함수를 사용하는 이유는 무엇인가?

: ES6 이전에는 전역 변수를 오염시키지 않기 위해 사용
: ES6 이후에는 모듈이 등장했기 때문에 전역 변수에 대한 걱정을 하지 않아도 되므로, 함수를 한 번만 호출하고 버리고 싶거나 자체적으로 클로저를 생성하기 위해 사용

  • 재귀 함수는 무엇이고, 사용 시 주의할 점은 무엇인가?

: 함수 내부에서 자기 자신을 또 호출하는 함수
: 탈출 조건을 만들지 않으면 무한으로 함수를 호출하여 스택 오버플로우 발생

  • 중첩 함수는 무엇인가?

: 외부 함수 내부에 정의된 함수, 내부 함수라고도 함
: 중첩 함수는 외부 함수 내부에서만 호출할 수 있음

  • 콜백 함수는 무엇인가?

: 외부에 정의되어 매개변수를 통해 다른 함수의 내부로 전달되는 함수

  • 콜백 함수를 사용하는 이유는 무엇인가?

: 공통 로직을 분리하여 재사용하기 위해서
: 변하지 않는 공통 로직을 미리 정의해두고, 경우에 따라 변경되는 로직을 추상화하여 함수 외부에서 매개변수를 통해 함수 내부로 전달하는 것이 바람직함

  • 중첩 함수와 콜백 함수의 차이는 무엇인가?

: 함수가 내부에 정의되었는지, 외부에 정의되었는지 그 위치의 차이
: 함수 자체가 고정적인지, 가변적인지의 차이

  • 순수 함수는 무엇이고, 왜 지향해야 하는가?

: 외부의 상태를 참조하거나 외부의 상태에 의존하지 않는 함수
: 순수 함수는 외부 상태를 참조하지 않으므로 순수 함수 자체만 신경쓰면 됨, 유지보수가 편해짐

  • 함수형 프로그래밍에서 순수 함수의 사용을 어떻게 바라보아야 하는가?

: 순수 함수 사용을 지향해야 하지만 addEventListener 등을 사용하는 경우 모든 것을 순수 함수로 만드는 일은 애초에 불가능함, addEventListener로 발생하는 부수 효과가 바로 프로그래밍의 본질이기 때문
: 결국 모든 애플리케이션에서 부수 효과를 피할 수 없기 때문에 부수 효과가 발생하는 부분과 발생하지 않는 부분을 나눠서 작성해야 함

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

0개의 댓글