면접 예상 질문: CSS, Javascript 고급
CSS
position 속성이란?
요소들을 어떻게 배치할지 결정하는 속성입니다.
종류
- absolute: 원하는 위치를 지정해 배치 (부모 요소의 position이 relative면 부모 위치 기준으로 결정)
- relative: 이전 요소에 자연스럽게 연결하여 배치
- fixed: 화면상의 지정한 위치에 고정하여 배치 (스크롤해도 고정)
- static: 요소를 문서 흐름에 맞게 배치
display 속성이란?
요소를 어떻게 보여줄지 결정하는 속성입니다.
- none: 요소를 렌더링하지 않음.
visibility: hidden
과 다르게 영역을 차지하지도 않음 - inline: 줄 바꿈이 되지 않음 (span 태그의 기본 속성)
- block: 가로 영역을 모두 차지하며 항상 줄 바꿈이 됨
- inline-block: 요소 자체는 inline처럼 줄바꿈이 되지 않지만 해당 요소 내부는 block처럼 작동함
- flex: 1차원 (가로 or 세로) 적으로 배치할 수 있는 방식
- grid: 2차원 (가로, 세로 동시에) 적으로 배치할 수 있는 방식
- table: 레이아웃을 table로 표현
reset.css vs. nomalize.css
둘 다 크로스 브라우징을 위해 사용됩니다.
- reset: 브라우저마다 다른 스타일 기본값이 지정되어 있으므로 이것을 모두 초기화
- normalize: 브라우저마다 보기 좋은 스타일 기본값을 최대한 유지하면서 사용.
normalize
는reset
보다 코드를 효율적으로 작성하는데 도움을 주며 최근에는 점점 더 자주 사용되는 추세입니다.
sass vs. css module vs. css in js
- sass
- css의 전처리기로서, 확장판
- 셀럭터, 변수, 함수, mixin 생성 가능
- nesting 기능으로 관련 속성 그룹화
- css와 비교하여 재사용성 향상
- css module
- 모듈별로 스타일이 정의되기 때문에 다른 모듈의 스타일과 충돌 X
- 다른 모듈과 클래스명 중복 X (자동으로 클래스명에 해시값 추가)
- css in js
- css 코드를 js 파일 안에서 작성
- 다른 컴포넌트와 클래스명 중복 X (자동으로 클래스명에 해시값 추가)
- props를 받을 수 있음
- 삼항연산자 사용 가능 w/ 템플릿 리터럴
Javascript
이벤트 캡처링이란?
버블링과 반대로 하위 요소에서 이벤트 발생시 최상위 부모 요소에서부터 이벤트가 발생하여 타고 내려오면서 해당 요소까지 이벤트가 순서대로 발생하는 것
주로 사용되는 경우: 어떤 요소에 이벤트가 발생하여도 그 상위 요소의 이벤트가 발생하도록 하고 싶을 때
클로저는 어떨 때 사용?
- 외부 함수의 변수를 기억하고 항상 최신 상태를 유지해야 하는 상황에서 유용
- 외부 함수의 변수를 private하게 사용 가능
프로토타입의 개념과 장단점, 사용 예시는?
어떠한 객체의 인스턴스 생성시 해당 객체의 prototype __proto__
를 참조하기 때문에 프로퍼티와 메서드를 바로 사용할 수 있습니다.
장점
- 재사용성, 메모리 절약
- 유연한 프로그래밍
단점
- 예측성, 안정성 떨어짐 (예상치 못하게 프로토타입에 정의된 메서드 있을 수 있음)
사용예시
toString()
메서드가 있습니다. 해당 객체의 프로토타입에 정의된 메서드가 없다면 prototype chaining을 통해 상위 객체의 프로토타입의 메서드를 검색합니다.
그렇게 계속 타고 올라다가 결국에는 모든 객체의 조상인 Object의 프로토타입의 메서드를 검색하여 toString()
를 정상적으로 실행시킵니다.
호이스팅의 발생 이유는?
- JS 엔진은 함수 선언문 해석 -> 변수 초기화 -> 코드 실행 순서로 진행
- 코드 실행 시점엔 이미 함수와 변수가 생성되어 있는 상태
- 따라서, 어디에서든 함수나 변수 호출 가능
실행 컨텍스트란?
실행할 코드에 제공할 환경 정보들을 모아놓은 객체입니다.
JS는 실행 컨텍스트가 활성화되는 시점에 다음과 같은 현상이 발생합니다.
- 호이스팅 발생
- 외부 환경 정보 구성
- this 설정
실행 컨텍스트는 크게 2가지로 분류됩니다.
- 전역 컨텍스트: 프로그램의 모든 코드, 동작 환경을 포함하는 전역 환경 (페이지 종료될 때까지 유지)
- 함수 컨텍스트: 함수 호출시 지정되는 함수 동작 내부 환경
Null 병합 연산자 (??) 란?
왼쪽 피연산자가 null
또는 undefined
일 때 오른쪽 피연산자를 반환하고, 그렇지 않으면 왼쪽 피연산자를 반환하는 논리 연산자입니다.
null
, undefined
이외의 falsy한 값은 그대로 나타낸다는 점은 주의하여야 합니다.
let temp = null ?? 0;
console.log(temp); // 0
temp = 1 ?? 0;
console.log(temp); // 1
temp = NaN ?? 0;
console.log(temp); // NaN
optional chaining의 개념과 장점은?
좌항의 피연산자가 null
이나 undefined
일 경우에 undefined
를 반환하고 그렇지 않으면 참조를 이어갑니다.
장점
optional chaining을 사용하기 전에는 && 연산자로 우선적으로 확인하고 연산에 들어가야 했습니다.
optional chaining은 변수가 null
또는 undefined
인지 확인하고 프로퍼티를 참조할 때 유용합니다.
for ... of의 동작방식은?
- 이터러블의 인터페이스인
Symbol.iterator
메서드를 실행한다. - 이터러블은
Symbol.iterator
메서드를 실행하면 이터레이터를 리턴한다 - 이터레이터는
next()
메서드를 실행하면{ value, done }
객체를 리턴한다.
iterator란?
객체를 next
메서드로 순환할 수 있는 객체입니다.
iterator
는 next()
메서드를 포함하고, next
메소드는 아래의 규칙을 따릅니다.
- argument 없음
- 반환값은
{ done: boolean, value: any }
를 포함하는object
여야 함 - 반복이 끝날 때
done
은true
를 반환하여야 함
generator란?
일반적인 함수는 호출시 종료될 때까지 중간에 멈추지 않습니다.
하지만, generator
는 원하는 부분에서 yield
를 통해 멈추었다가 next
로 다시 이어나갈 수 있는 함수입니다. (중간에 종료하고 싶을 때는 return
)
function *foo(x) { ... } // 함수 이름 앞에 * 붙임
구체적인 특징은 https://velog.io/@dkdlel102/자바스크립트에서-제너레이터와-asyncawait 을 참고해주세요.
yield
의 뜻은 함수 실행의 제어권을 양도 (yield) 한다는 의미입니다.
JS의 GC란?
GC는 메모리 관리 기법 중 하나로 프로그램이 동적으로 할당했던 영역 중에서 필요없게 된 영역을 해제하는 기능입니다.
C와 같은 저수준의 언어는 직접 메모리를 할당하고 해제합니다. (malloc
, free
)
JS와 같은 고수준의 언어에서는 자동으로 메모리를 할당하고 필요 없어졌다고 판단되었을 때 자동으로 해제합니다.
GC의 순환참조 문제와 그 해결 방법은?
function phone() {
const apple = {};
const samsung = {};
apple.iphone = samsung;
samsung.galaxy = apple;
return 'circular';
}
phone();
phone()
함수가 호출되고 완료되어도 서로에게 참조가 걸려있기 때문에 GC는 메모리를 해제하지 않아서 계속 메모리에 남아있게 됩니다. 이것은 메모리 누수의 주요 원인입니다.
mark and sweep
방식으로 순환참조 문제를 보완할 수 있습니다.
이 알고리즘은 이 값이 참조되고 있는지에 중점을 두지 않고 도달가능성에 중점을 둡니다.
도달 가능성이란 JS의
root
라는 글로벌object
에서부터 해당 값까지 도달이 가능한가에 대한 여부입니다.
couple()
이 호출되고 완료된 후에는 더 이상 root
에서 apple
과 samsung
에 도달할 수 없기 때문에 해당 값들은 GC에 의해서 메모리가 해제됩니다.
throttle vs. debounce
throttle: 여러 번 발생하는 이벤트를 일정 시간 동안 한 번만 실행시킵니다.
debounce: 여러 번 발생하는 이벤트를 그룹화하여 특정 시간이 지난 후 한 번만 실행시킵니다.
debounce는 입력이 끝날때까지 계속 기다리지만, throttle은 입력이 시작되면 일정 주기로 계속 실행됩니다.
예시
throttle의 설정시간을 1000ms로 주면 해당 이벤트는 1000ms 동안 최대 한 번만 실행하게 됩니다.
debounce의 설정시간을 1000ms로 주면 이벤트가 발생하고 1000ms 이내에 다시 발생되면 계속 기다리다가 마지막으로 이벤트가 발생한 지 1000ms가 지나면 이벤트를 한 번 발생시킵니다.
NodeJS vs. JS
JS
- browser 내부에서만 사용 가능
NodeJS
- JS chrome v8 엔진으로 빌드된 JS 런타임
- browser 외부에서 사용 가능하고 주로 server side에 사용됨
polyfill이란?
구버전의 브라우저에서 사용할 수 있도록 구버전의 JS 코드로 JS의 최신 기능을 똑같이 구현한 것입니다.
Author And Source
이 문제에 관하여(면접 예상 질문: CSS, Javascript 고급), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dkdlel102/면접-예상-질문-CSS-Javascript-고급저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)