[JS] 2. 프론트엔드 질문 리스트 (변수, 호이스팅, 데이터 타입)

jjenny7·2023년 2월 6일
0

CS

목록 보기
15/15
post-thumbnail
  • 변수란?

값의 위치를 가리키는 상징적인 이름이다.


  • 변수를 선언한다는 것은 어떤 것을 의미하는가?

변수를 생성하는 것을 의미한다. 좀더 자세히 말하자면 값을 저장할 메모리 공간을 확보하고 이 메모리 주소를 변수 이름과 연결하여 값을 저장할 공간을 마련하는 준비를 하는 것이다.


  • var 키워드의 변수 선언 과정?

var 키워드는 선언과 초기화가 동시에 진행된다. 선언단계를 통해 변수 이름을 등록하고 초기화 단계를 통해 변수에 암묵적으로 undefinded를 할당해 초기화한다.

따라서 var 키워드로 선언한 변수는 어떠한 값을 할당하지 않아도 기본적으로 undefinded 라는 값을 가진다.


  • 만약 선언하지 않는 식별자에 접근하면 어떠한 일이 발생하는가?

ReferrenceError(참조에러)가 발생한다. 참조 에러는 식별자를 통해 값을 참조하려 했지만 자바스크립트 엔진이 등록된 식별자를 찾을 수 없을 때 발생하는 에러이다.


  • 호이스팅이란?

끌어올린다는 뜻으로 변수 혹은 함수의 선언을 스코프 최상단으로 끌어올려지는 현상을 말한다.

이는 자바스크립트의 변수 선언이 코드가 인터프리터에 의해 한줄씩 실행되는 런타임 시점이 아닌 그 이전 단계에서 먼저 실행되기 때문이다. 자바 스크립트 엔진은 소스코드의 평가 과정에서 변수 선언을 포함한 모든 선언(변수 선언문, 함수 선언문)을 코드에서 찾아내 먼저 실행한다. 따라서 변수 선언이 소스크드의 어디에 위치하는지와 상관없이 어디서든지 변수를 참조할 수 있다.


  • 그렇다면 변수 선언과 할당을 동시에 하는 경우엔 자바스크립트 엔진은 어떻게 동작하는가?

변수 선언과 값의 할당을 2개의 문으로 나누어 표현한 코드와 변수 선언과 값의 할당을 하나의 문으로 단축 표현한 코드는 정확히 동일하게 동작한다. 즉, 자바스크립트 엔진은 변수 선언과 값의 할당을 하나의 문으로 단축 표현해도 변수 선언과 값의 할당을 2개의 문으로 나누어 각각 실행한다.

변수 선언은 런타임 이전에 먼저 실행되고 값의 할다은 소스코드가 순차적으로 실행되는 런타임에 실행된다.

따라서 변수에 undefined가 할당되어 초기화 되는 것은 변함이 없다. 또한 변수에 값을 할당할 때는 이전값 undefinded가 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값을 새롭게 저장하는 것이 아닌 새로운 메모리 공간을 확보하고 그곳에 할당 값을 저장한다는 점에 주의해야 한다.


  • 함수 호이스팅은 왜 안좋은가? 그렇담 어떻게 대체할 수 있는가?

예상치 못한 상황으로 오류 발생의 가능성이 있다. 이를 대체하기 위한 방법으로 화살표 함수를 사용한다.


  • 가비지 콜렉터란? (역할, 동작 방식)

애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 변수에 연결되어 있지 않은, 즉 아무도 사용하고 있지 않는 불필요한 값들의 메모리 공간을 해제하는 기능을 말한다.

자바 스크립트는 가비지 콜렉터를 내장하고 있는 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지한다. 단 개발자의 직접적인 메모리 제어를 허용하지 않기 때문에 개발자가 명시적으로 메모리를 할당하고 해제할 수 없다.


  • 예약어란?

프로그래밍 언어에서 사용되고 있거나 사용된 예정인 단어를 말한다.


  • 자바스크립트에서 일반적인 네이밍 컨벤션에 대해 알고있는가?

    변수나 함수이름은 camelCase 를 사용하고 생성자 함수나 클래스 이름은 앞에 대문자를 사용하는 PascalCase를 사용한다.


  • 자바스크립트의 원시 타입은 몇가지인가? 그리고 원시타입의 종류는?

boolean, string, number, null, undefined, symbol
이렇게 6가지 종류가 있다. undefinded는 선언만 되어 있고 값은 없는 상태이며, null은 자료형이 객체이며 빈 값을 의미한다.


  • 자바스크립트의 number type은 다른 언어들과 차이점이 무엇인가?

다른언어는 다양한 숫자 타입이 있지만, JS number 타입은 모든 수를 실수로 처리한다. 정수만을 위한 타입이 없고 모든 수를 실수로 처리하는 것을 의미한다.

추가적으로 숫자타입은 세 가지 특별한 값도 표현할 수 있다

  • Infinity : 양의 무한대
  • -Infinity : 음의 무한대
  • Nan : 산술 연산 불가 (Not a number)

  • 자바스크립트의 문자열과 C, Java의 문자열과 다른 점은?

C는 문자열을 제공하지 않고 문자의 배열로 문자열을 표현하고, 자바는 문자열을 객체로 표현한다.
하지만 자바스크립트의 문자열을 원시타입이며 변경 불가능한 값이다. 이것은 문자열이 생성되면 그 문자열을 변경할 수 없다는 것을 의미한다.


  • undefined와 null의 차이점에 대해 설명해보아라

undefinded자바스크립트 엔진이 변수를 초기화할때 사용하는 값으로 사용자가 변수를 선언후에 초기화 하지 않았을 때 나타나는 값이다.
반면에 null변수에 값이 없다는 것을 의도적으로 명시할 때 사용하는 값이다. 따라서 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미이며 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미한다.


  • symbol 타입이란?

ES6에서 새롭게 추가된 타입으로 이름이 충돌할 위함이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용 하며 다른 값과 절대 중복되지 않는 유일무이한 값이다. 다른 원시 타입과 다르게 Symbol() 함수를 사용하여 생성한다.


  • 데이터 타입이 필요한 이유는?

    • 값을 저장할 때 확보해야하는 메모리 공간의 크기를 결정하기 위해서
    • 값을 참조할 때 한번에 읽어들여야 할 메모리 공간의 크기를 결정하기 위해서
    • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해서

  • 정적타입언어와 동적타입언어의 차이점은?

자바와 C언어와 같은 정적 타입 언어변수를 선언할 때 데이터 타입을 사전에 선언해야 한다(명시적 타입 선언). 이에 정적 타입 언어는 변수의 타입을 변경할 수 없으며 해당 타입에 맞는 값만 할당할 수 있다.

하지만 자바스크립트와 같은 동적 타입 언어는 변수 선언이 아닌 할당에 의해 타입이 결정(타입 추론)되고 재할당에 의해 변수의 타입이 동적으로 변할 수 있다(동적 타이핑).


  • 변수는 타입을 가지는가?

기본적으로 변수는 타입을 갖지 않는다. 하지만 값은 타입을 가진다. 따라서 현재 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정된다고 표현하는 것이 더 적절하다.


  • 동적 타입 언어의 단점은?

변수의 값이 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어려울 수 있다. 또한 값의 변경에 의해 타입도 언제든지 변경될 수 있다. 따라서 동적 타입의 언어는 유연성은 높지만 신뢰성이 떨어진다.


  • 정적 타입 언어의 장점은?

컴파일 시점에 타입 체크를 수행하기 때문에 타입 체크를 통과하지 못했다면 에러를 발생시키고 프로그램 실행 자체를 막는다. 따라서 안정적인 코드 구현과 런타임시 발생하는 에러를 줄일 수 있다는 특징이 있다.


profile
水急不流月

0개의 댓글