- ES6 이후에는 함수를 왜 구분해놓았는가?
: 특정한 상황과 목적에 맞는 함수를 생성하기 위한 목적
: ES6 이전에는 메서드를 생성자 함수로서 사용할 수 있었고, 에러를 발생시킬 우려가 있기 때문에 ES6에서는 메서드 축약 표현을 사용하여 이를 최소화할 수 있음
- 함수를 구분 없이 사용하는 경우 안 좋은 점은 무엇인가?
: 생성자 함수로 사용할 일이 없는데 생성자 함수의 프로퍼티를 가지게 되면 사용하기도 복잡하고 메모리가 낭비되어 성능이 저하됨
- 화살표 함수가
this
,super
바인딩을 가지지 않는 이유는 무엇인가?: 애초에
this
와super
키워드는 생성할 인스턴스를 참조해야 하는 메서드 내에서만 의미가 있기 때문에 사용 목적에 부합하지 않음
- 화살표 함수는 어떤 상황에서 유용하게 사용할 수 있는가?
: 일반 함수보다 내부 동작이 간편하고 성능과 가독성 면에서도 더 유리하기 때문에 생성자 함수와 메서드로 사용할 일이 없다면 언제든지 유용하게 사용할 수 있음
- 전역에 선언한 클래스 내부에 클래스 필드로 메서드에 화살표 함수를 할당한다면, 그 화살표 함수의 내부에서 사용한
this
는 어디에 바인딩되는가?:
constructor
함수가 가지는this
바인딩의 값
: 원래는 클래스 필드의 상위 스코프가 전역 스코프이므로window
를 가리키는 것이 정확하지만 클래스 필드로 할당한 메서드의this
는constructor
의this
를 가리키도록 특수하게 설계됨
- ES6 이후에 유사 배열 객체 대신 배열을 사용하는 이유는 무엇인가?
: 배열 빌트인 메서드를 사용하려면
Function.prototype.call
등의 메서드를 사용해야 하기 때문에 가독성이 좋지 않음
- 자료구조 관점에서 배열이 가지는 장단점은 무엇인가?
: 배열은 임의 접근에 최적화되어 있음, 첫 번째 요소든 세 번째 요소든 동일한 시간 복잡도를 가지기 때문
: 그러나 중간의 요소를 변경하는 경우 그 앞뒤의 요소까지 다 옮겨야 하기 때문에 요소의 삽입, 삭제에는 성능이 좋지 않음
- 배열은 어떤 경우에 사용해야 하는가?
: 데이터를 추가 및 삭제하는 일이 적고, 접근 및 조회하는 일이 많은 경우에 사용하는 것이 바람직함
- 배열의 요소에 동일한 데이터 타입을 삽입하는 것이 바람직한 이유는 무엇인가?
: 배열의 목적 자체가 순회하면서 요소에 동일한 로직을 적용하기 위한 것인데, 요소의 데이터 타입이 다 다르다면 요소에 동일한 로직을 적용할 수 없기 때문에 배열의 목적에 위배되기 때문
- 배열 메서드 중에서도 고차함수를 사용하는 것이 바람직한 이유는 무엇인가?
: 원본 배열을 조작하게 되면 코드의 라인 수가 많아졌을 때 그 원본 배열을 추적하는 일이 힘들어지므로 가독성이 좋지 않음
: 함수형 프로그래밍 관점에서도 순수 함수를 지향해야 하므로 외부 상태인 원본 배열을 변경하지 않는 것이 바람직 함
- 배열 메서드 중
map
,filter
는 어떤 과정으로 동작하는가?: 콜백 함수의 매개변수로 무조건 요소 값, 인덱스,
this
를 넘겨줌
: 콜백 함수의 반환 값으로 새로운 배열 요소를 반환함
map
,filter
,reduce
는 각각 어떤 상황에 사용하는 것이 바람직한가?:
map
은 원본의 요소를 토대로 원본과length
가 동일한 새로운 배열을 반환할 때 사용
:filter
는 원본의 요소를 토대로 원본과length
가 동일하거나 더 적은 새로운 배열을 반환할 때 사용
:reduce
는 원본의 요소를 토대로 반환하는 값이 단 하나인 경우에 사용