Dev/SW Engineering

12. Sprint 1/4 Assessment - 중간 점검

HJChung 2020. 6. 14. 23:57

문제1.

다음의 코드를 실행시킨 후에 result값은 무엇인가?

답1.

10

line 1의 var x= 10과 line 3의 var x = 20의 x는 서로 다른 x로, line 3의 x는 outer 함수의 scope내에서만 유효한 x이기때문이다. 

그래서 line 13의 x는 line 1의 x이다. 

 

문제2.

다음의 코드를 실행시킨 후에 result값은 무엇인가?

답2.

30

get함수 내의 x는 새로 선언된 것이 아니므로 global value이다. 따라서 get(20)의 20은 아무 영향도 미치지 못하며 global x의 값인 30이 반환된다. 

 

문제3.

다음 코드를 실행시키면 콘솔에 찍히는 것은?

답3.

Window or the global object

fn은 obj의 메소드가 아닌 독립적인 함수 function(){console.log(this);}를 가진다. 그래서 fn을 call 했을 때 이때의 this는 window or the global object이다. 

 

문제4.

다음 코드에서 Closure 사용을 보여주는 함수는?

답4.

closure는 내부함수가 외부함수에 접근 할 수 있는 것을 말한다. 여기서도 line 3의 x*y에서 x를 외부함수에서 가져와야 하기 때문에 외부함수에 접근해야 한다. 따라서 multiplyByX가 Closure 사용을 보여준다. 

Closures에 대해서 더 알고자 한다면 ↓

더보기

1. 외부함수와 내부함수

클로저(closure)는 내부함수가 외부함수에 접근 할 수 있는 것을 말한다. 우선 내부함수가 뭐고 외부함수가 무엇인지부터 알아보자. 

2. closure의 주요 특징

내부함수를 포함하는 외부함수에 접근할 수 있을 뿐만 아니라, 외부함수가 종료된 이후에도 내부함수를 통해 접근 할 수 있다.

즉, 클로저란 내부함수가 외부함수의 지역변수에 접근 할 수 있고, 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는 특성을 의미한다.

3. 클로저와 private variable

private variable이란, 어떤 정보를 아무나 수정할 수 없도록 방지하는 것을 의미한다. 

클로저는 외부에서 어떤 variable에 접근하지 못하도록 private variable을 구현 할 수 있다. 

=> 이것의 장점은 title이라는 변수값을 아무나 외부에서 수정할 수 없기 때문에 맥락에 영향을 주지 않는다. 그리고, 

set_title을 통해 title의 값을 변경할 때, set_title에 일정한 조건을 추가함으로써 title의 변수 설정이 안전하게 수정되고 저장 될 수 있다. 

문제5.

노드가 5개인 연결 리스트의 모든 노드를 가장 효율적으로 삭제하고 싶을 때 총 몇 번의 연산이 필요한가? (단, 언어는 JavaScript를 사용한다.)

답5.

JavaScript에서는 head만 삭제하여 그 이후의 reference가 다 끊어져서 접근이 불가능하면 garbage collector가 이를 가져가서 회수한다. 따라서 head만 삭제하는 1번의 연산으로 모든 노드를 가장 효율적으로 삭제 할 수 있다. 

 

문제6.

Stack에 대한 설명 중 틀린것은?

답6.

top 메서드는 스택 가장 상단 데이터를 리턴 하는 것이고, 값을 꺼내진 않는다. 

 

문제7.

해시 테이블과 해시 함수에 대한 설명으로 틀린 것은?

답7.

해시 함수는 두 개 이상의 값에 하나의 키값이 나오는 충돌을 발생 시킬 수 있으며 이를 방지하기 위해 여러 방법이 사용된다. 

 

문제8.

다음 코드의 결과는 무엇인가?

답8.

hello는 Student.prototype에 정의된 것이고, human은 Person의 객체이므로, Person에는 hello가 정의되어 있지 않다. 따라서 human.hello는 undefined이고, undefined를 실행(human.hello())시키려고하면 Typeerror가 난다. 

 

문제9.

다음 코드의 결과는 무엇인가?

답9.

단순 함수이므로 실행하면 hello, world 가 출력됨.

 

문제10.

다음 코드의 결과는 무엇인가? (순서대로)

답10.

let name = 'park'의 name과 human.name = 'kim'의 name은 다른 name이다. 그래서, 'kim'/'park'이다.