본문 바로가기
코드잇 스프린트 6기/JS Q.R 스터디

[JS Q.R] 7번째 온라인 모임

by 학습하는 청년 2024. 5. 17.

일시 : 2024-05-17(목)

참여인원 5명

 

1. 클로저에 대한 정의를 설명해주시고, 사용하는 이유와 리액트에서의 용례를 얘기해주세요.

클로저(closure)란 "함수가 자유 변수에 대해 닫혀있다(closed)"라는 의미이다. 다시 말해, 클로저는 상태(state)를 안전하게 변경하고 유지하기 위해 사용한다고 말할 수 있다. 따라서 상태를 안전하게 은닉하고 특정 함수에게만 상태 변경을 허용하기 위해 사용한다. 그 이유는 값에 대해 예측가능해야 하고, 의도하지 않은 변경을 걱정할 필요를 줄여 안정적인 프로그래밍을 하기 위함이다.

 

리액트에서의 상태 변경은 재렌더링과 연관이 깊다. 상태가 변하거나 부모의 상태가 변하면 재렌더링이 발생한다. 따라서 특정 함수에서만 상태를 변경할 수 있도록 만들어야 한다. 대표적인 함수로는 useState()가 있다. 그리고 이벤트 핸들링에서 자주 사용된다.

 

===

렉시컬 환경과의 조합이다.

 


2. 실행 컨텍스트와 클로저의 연관성을 설명해주세요.

 


3. This에 대한 정의와 필요한 이유에 대해 얘기해주세요.

객체는 상태를 나타내는 프로퍼티와 동작을 나타내는 메서드를 하나의 논리적인 단위로 묶은 복합적인 자료구조인데, 메서드는 프로퍼티를 변경할 수 있어야 한다. 이때 참조하려면 먼저 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 하는데, 그 역할을 하는 것이 this이다.

 

this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수(self-referencing variable)다. this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조할 수 있다.

 

생성자 함수 내부에서는 프로퍼티 또는 메서드를 추가하기 위해 자신이 생성할 인스턴스를 참조할 수 있어야 한다. 그러나 생성자 함수에 의한 객체 생성 방식은 먼저 생성자 함수를 정의한 이후 new 연산자와 함께 생성자 함수를 호출하는 단계가 필요하다. 다시 말해, 생성자 함수로 인스턴스를 생성하려면 먼저 생성자 함수가 존재해야 한다.

 

이때, 생성자 함수를 정의하는 시점에는 아직 인스턴스를 생성하기 이전이므로 생성자 함수가 생성할 인스턴스를 가리키는 식별자를 알 수 없다. 따라서 자바스크립트에서는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 특수한 식별자가 제공된다. this는 자바스크립트 엔진에 의해 암묵적으로 생성되며, 코드 어디서든 참조할 수 있다. 함수를 호출하면 arguments 객체와 this가 암묵적으로 함수 내부에 전달되어 this도 지역 변수처럼 사용할 수 있다. 단, this가 가리키는 값, 즉 this바인딩은 함수 호출 방식에 의해 동적으로 결정된다.

 

this 바인딩 : 바인딩이란 


4. 자바스크립트 엔진에서 소스코드를 처리하는 방식에 대해 설명해주시고, 실행 컨텍스트의 역할에 대해 얘기해주세요.

모든 소스코드는 실행에 앞서 평가 과정을 거치며 코드를 실행하기 위한 준비를 한다. 이를 '소스코드의 평가'와 '소스코드의 실행'이라 부른다.

 

소스코드 평가 과정에서는 실행 컨텍스트를 생성하고 변수, 함수 등의 선언문만 먼저 실행하며 생성된 변수나 함수 식별자를 키로 실행 컨텍스트가 관리하는 스코프에 등록한다. 소스코드의 실행은 런타임이 시작될 때, 소스코드 실행에 필요한 정보, 즉 변수나 함수의 참조를 실행 컨텍스트가 관리하는 스코프에서 검색해서 취득한다. 그리고 변수 값의 변경 등 소스코드의 실행 결과는 다시 실행 컨텍스트가 관리하는 스코프에 등록된다.

 

실행 컨텍스트는 소스코드를 실행하는 데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다. 실행 컨텍스트는 식별자를 등록하고 관리하는 스코프와 코드 실행 순서 관리를 구현한 내부 메커니즘으로, 모든 코드는 실행 컨텍스트를 통해 실행되고 관리된다. 이때 식별자와 스코프는 실행 컨텍스트의 렉시컬 환경으로 관리하고 코드 실행 순서는 실행 컨텍스트 스택으로 관리한다.

----

실행 컨텍스트의 평가는 언제 이루어지는가?

함수 코드는 런타임 이전인가 이후에 평가가 이루어지는가?

-> 함수 선언문은 런타임이전에 실행된다. 


5. 클로저와 캡슐화에 대해 설명해주시고, 둘의 연관성을 얘기해주세요.

클로저는 값의 변경을 예측 가능하도록 하기 위해, 특정 함수에서만 변경할 수 있도록 설정하는 방법이다.

 

캡슐화(encapsulation)은 객체의 상태(state)를 나타내는 프로퍼티와 메서드를 하나로 묶는 것을 말한다. 또한, 이들을 감출 목적으로 사용하기도 하므로, 이를 정보 은닉(information hiding)이라 한다.

 

객체 동결은 객체 자체이고

클로저는 함수 내부의 변수를 다루는 것인 만큼 다르다.

----

왜 책에서는 엮었는지 모르겠다고 생각하시나요?

댓글