개발 기본 상식

출처 : https://github.com/junh0328/prepare_frontend_interview/

데이터 타입 🔥

데이터 타입의 종류는 어떤 것들이 있나요? 🔥

image

심벌 타입은 뭐죠?

ECMAScript 2015부터 심볼(Symbol)이라는 새로운 원시 타입이 도입되었습니다. Symbol은 고유하고 변경할 수 없는 식별자를 생성하며, 한 번 생성하면 복사할 수 없습니다. Symbol의 사용 목적은 객체의 고유한 프로퍼티 키를 만들기 위해 사용됩니다.

데이터 타입은 왜 필요할까요? 🔥

값을 저장할 때 필요한 메모리 공간의 크기를 알기 위해 값을 참조할 때 한 번에 읽어 들일 메모리 공간의 크기를 알기 위해 메모리에서 읽어 들인 2진수를 어떻게 해석할지 알기 위해

정적 타이핑이 뭔가요?

정적타이핑은 동적타이핑과 정반대로 코드를 작성할 때 컴퓨터적 구조를 명시해준다. 즉, int a = 15 라는 식으로 변수의 데이터 타입을 직접 명시하며 컴퓨터가 해야할 일을 덜어주는 것이다. 이는 코드를 작성하는데 관련된 작은 정보들까지 개발자가 직접 신경쓰도록 하는데, 이렇게 되면 코드의 안정성과 정교함이 커진다. 하지만, 코드 구조 자체는 눈에 잘 들어올지라도 코드가 매우 길고 복잡해져서 처음 프로그래밍에 입문하기에 추천되지는 않는다.

동적 타이핑이 뭔가요?

동적타이핑은 코드를 작성하는데 있어서 컴퓨터적 구조를 생략한다. 따라서 변수를 지정할 때 해당 변수의 데이터 타입 등을 명시하지 않아도 컴퓨터가 알아서 해석하도록 냅둔다. 예컨대 파이썬에서 a = 15 라는 식으로 변수를 지정할 때 a가 숫자라고 명시 하지 않더라도 컴퓨터는 이를 스스로 숫자라 해석한다. 이러한 방식은 코드를 보다 간결하게 해주며 코드의 로직을 보다 명확히 보여줄 수 있지만 데이터 타입이 뭔지 파악하는 것을 컴퓨터에게 맡기기 때문에 그 만큼 실행속도가 느려진다는 단점이 있다.

타입변환과 단축 평가 🔥

명시적 타입 변환이 뭔가요?

image

데이터 앞에 변환할 타입으로 명시해주는 경우를 의미한다. 주로 큰 데이터 타입을 작은 데이터 타입으로 변환할 때 사용되며, 데이터 손실의 가능성이 있어 명시적으로 형 변환을 해주지 않을 경우 에러가 발생한다.

명시적 타입 변환 함수를 예를 들어볼 수 있나요?

        let num1 = "10";
        let num2 = "5";
        console.log("현재 num의 타입 : " + (typeof num1)); // String
        console.log("num1 + num2 : " + (num1 + num2)); // 105
        console.log("Number(num1) + Number(num2) : " + (Number(num1) + Number(num2)));

암묵적 타입 변환이 뭔가요?

표현식을 평가할 때 문맥, 즉 컨텍스트에 부합하지 않는 다양한 상황이 발생할 수 있다. 이때 자바스크립트는 가급적 에러를 발생시키지 않도록 암묵적 타입 변환을 통해 표현식을 평가한다.

암묵적 타입 변환이 발생하면 문자열, 숫자, 불리언과 같은 원시 타입 중 하나로 타입을 자동 변환한다

truthy / falsy 한 값이 뭔가요?

Falsy 좀 더 쉬운 이해를 위해 Fasly 값에 대해 먼저 알아보자. 자바스크립트에서는 총 6가지의 Falsy 값이 존재한다. 더도 말고 덜도 말고 딱 6개다. 0 NaN false null undefined ‘’

이 Falsy 값들이 자바스크립트에서 ‘불리언 값을 요구하는 부분’, 예를 들어 조건문이나 반복문에 들어가면, 자바스크립트가 내부적으로 이 값들을 False 불리언 값으로 형 변환해준다.

배열 🔥

자바스크립트의 배열은 자료구조의 배열과 같나요?

결론부터 말하자면, 자바스크립트의 배열은 배열이 아닌 객체이다. 더 정확하게는 일반적인 배열의 동작을 흉내 낸 특수한 객체이다.

자바스크립트에서 배열은 요소를 위한 각각의 메모리 공간은 동일한 크기를 갖지 않아도 되며, 연속적으로 이어져 있지 않을 수도 있다. 이러한 배열을 희소 배열(sparse array)라고 한다.

배열의 메서드는 어떤 종류가 있나요?

  1. push()

  2. pop()

  3. shift()

  4. unshift()

  5. reverse()

  6. sort()

  7. splice()

고차 함수에 대해서 아나요?

고차 함수는 함수를 인자(argument)로 받거나 함수를 리턴하는 함수를 말한다. 이 때 다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback function)라고 한다.

콜백 함수를 전달받은 함수는 이 콜백 함수를 호출(invoke)할 수 있다. caller는 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있고, 여러번 실행도 가능하다.

forEach 메서드와 map메서드의 차이점에 대해 알고 있나요?

forEach()

forEach() 메서드는 주어진 함수를 배열 요소 각각에 대해 실행합니다.

특징 forEach() 메서드는 아무것도 리턴하지 않는다. 콜백함수에서 호출 된 배열을 변경할 수 있다.

map()

map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환 합니다.

특징 콜백함수에서 호출 된 배열의 원본을 유지하며, 새로운 배열을 생성할 수 있다. map() 메서드는 새로 생성된 배열을 리턴한다.

객체 리터럴 🔥

자바스크립트에서 객체란 뭘까요?

바스크립트는 객체 기반 프로그래밍 언어이다. 자바스크립트를 구성하는 거의 ‘모든 것’이 객체이다.

원시형 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체이다.

원시형은 단 하나의 값만을 나타내지만 객체형(참조형)은 다양한 값(원시 값 또는 다른 객체)을 하나의 단위로 구성한 복합적인 자료구조(data structure)이다.

또한 원시형의 값, 즉 원시 값은 변경 불가능한 값(immutable value)이지만 객체형의 값, 즉 객체는 변경 가능한 값(mutable value)이다.

함수와 메서드의 차이점에 대해 알고 계신가요?

함수는 여러 문장들이 하나의 기능을 구현하도록 구성한 것이라고 할 수 있다. 그 함수 중에서 클래스 내부에 정의한 함수를 메소드라고 부르는 것이다. 또한 메소드는 객체의 속성을 다루기 위한 행위를 정의한 것이라는 의미도 포함하고 있다.

즉, 독립적으로 존재하는 함수이냐, 클래스 내부에 종속되어 있느냐의 구분으로 함수와 메소드를 구분할 수 있다.

자바스크립트에서 객체를 생성하는 방법은 어떤 것들이 있나요?

  1. 기본 객체(Object() 객체)의 생성자 함수를 이용

  2. 객체 리터럴을 이용

  3. 생성자 함수 이용

원시 값과 객체 비교 🔥

원시 타입의 값(Immutable value), (= 원시 값)

원시 타입의 값, 즉 원시 값은 변경 불가능한 값(Immutable value)이다. 원시 값을 변수에 할당하면 변수(식별자)에는 실제 값이 저장된다. 원시 값을 갖는 변수(식별자)를 다른 변수(식별자)에 할당하면 원본의 원시 값이 복사되어 전달된다.(값에 의한 전달(Pass by value)) 객체(참조) 타입의 값(mutable value), (= 객체)

객체(참조) 타입의 값, 즉 객체는 변경 가능한 값(mutable value)이다. 객체를 변수에 할당하면 변수(식별자)에는 참조 값이 저장된다. 객체를 가리키는 변수(식별자)를 다른 변수(식별자)에 할당하면 원본 의 참조 값이 복사되어 전달된다.(참조에 의한 전달(Pass by reperence))

값에 의한 전달이 뭔가요?

값에 의한 전달 방법은 인수로 전달되는 변수가 가지고 있는 값을 함수 내의 매개변수에 복사하는 방식입니다. 이렇게 복사된 값으로 초기화된 매개변수는 인수로 전달된 변수와는 완전히 별개의 변수가 됩니다. 따라서 함수 내에서의 매개변수 조작은 인수로 전달되는 변수에 아무런 영향을 미치지 않습니다.

참조에 의한 전달이 뭔가요?

참조에 의한 전달 방법은 인수로 변수의 값을 전달하는 것이 아닌, 해당 변수의 주소값을 전달합니다. 즉 함수의 매개변수에 인수로 전달된 변수의 원래 주소값을 저장하는 것입니다. 이 방식을 사용하면 인수로 전달된 변수의 값을 함수 내에서 변경할 수 있게 됩니다