🔶 JavaScript

  • 자바스크립트의 타입 변환에는 무엇이 있고, 각각의 특징은 무엇인가?

: 암묵적 타입 변환과 명시적 타입 변환으로 구분할 수 있음
: 암묵적 타입 변환은 개발자의 의도와 상관없이 값의 타입을 자바스크립트 엔진이 문자열, 숫자, 불리언 같은 원시 타입으로 변환시키는 것, 타입 강제 변환이라고도 함
: 명시적 타입 변환은 개발자가 의도적으로 값의 타입을 변환하는 것, 타입 캐스팅이라고도 함

  • 개발자로서 타입 변환에 대해 이해하고 있어야 하는 이유는 무엇인가?

: 예측 가능한 코드를 작성하기 위해 타입 변환이 어떻게 동작하는지 정확히 이해하고 있어야 함
: 암묵적 타입 변환을 잘 사용하면 명시적 타입 변환보다 가독성이 좋을 수도 있음

  • 암묵적 타입 변환 중 문자열 타입 변환은 어떤 방식으로 이루어지는가?

: + 연산자를 문자열 연결 연산자로 사용하는 경우 피연산자가 문자열이 아니라면 문자열 타입으로 변환시킴
: 템플릿 리터럴 안에 표현식을 삽입하는 경우 표현식 평가 결과를 문자열 타입으로 변환시킴
: + 연산자와 함께 ''(빈 문자열)을 피연산자로 사용하면 문자열 타입이 아닌 피연산자를 문자열 타입으로 변환시킬 수 있음

  • 암묵적 타입 변환 중 숫자 타입 변환은 어떤 방식으로 이루어지는가?

: 산술 연산자와 비교 연산자를 사용하는 경우 표현식의 값으로 각각 숫자 타입, 불리언 타입을 생성해야 하므로 피연산자 중에 숫자 타입이 아닌 경우 숫자 타입으로 변환시킴
: 앞에 + 단항 연산자를 붙여서 숫자 타입으로 변환시킬 수 있음

  • 암묵적 타입 변환 중 불리언 타입 변환은 어떤 방식으로 이루어지는가?

: 조건식 안에 있는 표현식의 값을 불리언 타입으로 변환시킴

  • Truthy 값과 Falsy 값은 무엇이고, 어떤 것들이 있는가?

: Truthy 값은 불리언 타입이 아닌 값들 중에서 참으로 평가되는 값, Falsy 값은 불리언 타입이 아닌 값들 중에서 거짓으로 평가되는 값
: 자바스크립트에서 Truthy 값은 Falsy 값이 아닌 모든 값
: Falsy 값은 false, undefined, null, 0, -0, NaN, ''이 해당함, 이 외의 값은 모두 Truthy 값

  • 명시적 타입 변환 중 문자열 타입 변환은 어떤 방식으로 이루어지는가?

: String 생성자 함수를 new 연산자 없이 호출
: 빌트인 메서드 toSting을 이용
: 문자열 연결 연산자 + 이용(암묵적 타입 변환)

  • 명시적 타입 변환 중 숫자 타입 변환은 어떤 방식으로 이루어지는가?

: Number 생성자 함수를 new 연산자 없이 호출
: parseInt, parseFloat 함수 사용하여 문자열을 숫자 타입으로 변경
: + 단항 산술 연산자, * 산술 연산자 이용(암묵적 타입 변환)

  • 명시적 타입 변환 중 불리언 타입 변환은 어떤 방식으로 이루어지는가?

: Boolean 생성자 함수를 new 연산자 없이 호출
: 부정 논리 연산자 !를 두 번 사용(암묵적 타입 변환)

  • 단축 평가란 무엇인가?

: 표현식을 평가하는 도중에 결과가 확정되면 나머지 평가 과정을 생략하는 것을 의미

  • 단축 평가의 종류에는 어떤 것이 있는가?

: 논리 연산자(&&, ||)를 사용한 단축 평가
: 옵셔널 체이닝 연산자(?.)를 사용한 단축 평가
: null 병합 연산자(??)를 사용한 단축 평가

  • 논리 연산자(&&, ||)를 사용한 단축 평가는 어떻게 활용할 수 있는가?

: &&(논리곱), ||(논리합) 연산자 사용 시 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환하는 것
: 옵셔널 체이닝 연산자와 null 병합 연산자 등장 이전에 각각 객체가 할당된 변수가 null, undefined인지 확인하고 참조하거나, 매개변수에 기본 값을 설정할 때 사용

  • 옵셔널 체이닝 연산자(?.)는 어떤 방식으로 동작하는가?

: 좌항의 피연산자가 null, undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조
: &&와는 다르게 Falsy 값이어도 null, undefined만 아니라면 우항의 프로퍼티 참조

  • null 병합 연산자(??)는 어떤 방식으로 동작하는가?

: 좌항의 피연산자가 null, undefined인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자 반환
: ||와는 다르게 Falsy 값이어도 null, undefined만 아니라면 좌항의 피연산자 반환

  • 객체란 무엇인가?

: 자바스크립트를 구성하는 거의 모든 것
: 원시 타입의 값을 제외한 함수, 배열 등의 나머지 모든 것
: 원시 타입, 객체 타입 등 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조

  • 자바스크립트에서 객체는 어떻게 생성할 수 있는가?

: 객체 리터럴, Object 생성자 함수, 생성자 함수, Object.create 메서드, 클래스
: 객체 리터럴을 제외한 나머지 생성 방법은 모두 함수
: 객체 리터럴 역시 값으로 평가되는 표현식이므로 뒤에 ;을 붙여야 함

  • 객체는 어떤 특징이 있는가?

: 값을 변경할 수 있음
: 0개 이상의 프로퍼티로 구성되어 있음

  • 프로퍼티는 무엇인가?

: 객체의 상태를 나타내는 값이자 객체의 구성 요소
: 프로퍼티는 키와 값으로 이루어져 있고, 이때 값은 자바스크립트에서 사용할 수 있는 모든 값이 될 수 있음

  • 프로퍼티 키 사용 시 주의할 점은 무엇인가?

: 프로퍼티 키에는 문자열 혹은 문자열로 평가할 수 있는 표현식과 심벌 값 사용 가능, 다만 표현식을 사용할 경우 [ ] 안에 묶어주어야 함
: 식별자 네이밍 규칙을 따르는 경우 ' '를 생략해도 되지만, 그렇지 않다면 반드시 ' ' 사용해야 함
: 프로퍼티 키에 문자열 타입이 아닌 값을 사용하면 문자열 타입으로 암묵적 변환됨

  • 메서드는 무엇인가?

: 프로퍼티를 참조하고 조작할 수 있는 동작
: 함수 역시 값으로 취급할 수 있으므로 프로퍼티 값이 될 수 있는데, 이처럼 객체에 종속된 함수를 메서드라고 부름

  • 프로퍼티 값에는 어떻게 접근할 수 있는가?

: 마침표 표기법(.)과 대괄호 표기법([ ])으로 접근 가능
: 식별자 네이밍 규칙을 준수하는 프로퍼티 키라면 마침표 표기법과 대괄호 표기법을 모두 사용할 수 있지만, 그렇지 않다면 대괄호 표기법 내부에 ' '를 사용하여 접근할 수 있음

  • 프로퍼티를 삭제하는 방법은 무엇인가?

: delete 연산자로 삭제할 수 있지만, 다른 코드에 영향을 미치는 부수효과가 발생할 수 있기 때문에 웬만해서는 사용하지 않는 것이 바람직함
: 차라리 스프레드 연산자를 사용하여 삭제할 프로퍼티를 제외하고 사본을 만들거나, 새로운 객체를 생성하는 것이 바람지감

  • 존재하지 않는 프로퍼티를 delete 연산자로 삭제하면 어떻게 되는가?

: 에러를 출력하지 않고 그냥 무시

  • 원시 타입과 객체 타입은 어떤 차이가 있는가?

: 변경 가능 여부의 관점에서 원시 타입은 변경이 불가능하지만, 객체 타입은 변경이 가능
: 저장되는 값이 실제 값인지, 참조 값인지 차이가 있음
: 복사, 즉 기존 변수를 다른 변수에 할당했을 때 원시 값이 복사되어 전달되는지, 참조 값이 복사되는지 차이가 있음
: 이때 원시 값이 복사되어 전달되는 경우를 값에 의한 전달, 참조 값이 복사되어 전달되는 경우를 참조에 의한 전달이라고 함

  • 원시 값이 불변하다는 것은 무슨 의미인가?

: 여기서의 불변은 값을 변경할 수 없다는 의미, 변수에 다른 값을 새롭게 재할당하는 것과는 다름
: 재할당 시 원시 값 자체가 변경되는 것이 아니라, 새롭게 확보한 메모리 공간에 재할당한 원시 값을 저장하고 변수와 값을 연결시키기 때문에 불변하다고 볼 수 있음

  • 문자열로 원시 값의 불변성을 어떻게 확인해볼 수 있는가?

: 여러 개의 문자로 구성된 문자열은 유사 배열 객체이기 때문에 인덱스로 각각의 문자에 접근할 수 있음, 이때 각각의 문자를 변경하는 것이 불가능
: 만약 원시 값을 변경할 수 있다면 문자열의 구성 요소인 각각의 문자 역시 변경할 수 있어야 함

  • 원시 값을 복사하는 경우 발생하는 값에 의한 전달이란 무엇인가?

: 원시 값 자체가 복사되어 전달될 때 새롭게 확보한 메모리 공간과 그 주소에 값이 연결되므로 기존의 값을 수정해도 새롭게 복사된 값은 영향을 받지 않는 것

  • 객체 타입이 가변하다는 것은 무슨 의미인가?

: 객체 타입의 값은 변경할 수 있다는 것을 의미, 그러나 겉으로 보기에 변경할 수 있는 것처럼 보이는 것뿐임
: 객체의 경우 ‘변수(메모리 주소) > 원시 값’과는 달리 ‘변수(메모리 주소) > 참조 값(메모리 주소) > 원시 값’과 같은 방식으로 중첩되어 있기 때문에 참조 값의 메모리 주소를 변경하면 겉으로는 객체의 프로퍼티가 변경된 것처럼 보이므로 가변적이라고 말할 수 있음
: 그러나 결국에는 객체 역시 연결된 메모리 주소의 끝까지 도달하면 원시 값이 존재하고, 그 원시 값은 변경할 수 없음

  • 객체를 복사하는 경우 발생하는 참조에 의한 전달이란 무엇인가?

: 객체를 가리키는 변수를 다른 변수에 할당하여 복사하는 경우 원본의 참조 값(메모리 주소)가 전달되므로 그 값을 변수끼리 서로 공유하게 되고, 그 결과 원본 변수에서 객체를 변경할 때 복사한 변수에 할당한 객체도 영향을 받게 됨

  • 얕은 복사와 깊은 복사는 무엇인가?

: 얕은 복사는 참조 값만 복사되는 것, 깊은 복사는 원시 값만 복사되는 것
: 중첩된 객체의 경우 1 depth까지만 복사되는 현상이 얕은 복사라고 할 수 있음

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

0개의 댓글