본문 바로가기

개념정리

8/20[TIL] 함수 메소드 & 재귀 함수 & Recursion

함수 메소드를 실행하는 방법에는 function메소드/new키워드/함수메소드 .call/.apply를 이용해서 실행하는 방법이 있다.

 

전달 인자(argument)를 어떻게 전달하는지 방식에 따라. apply 같은 경우는 array의 형태(ex)add.apply(obj, [2,8]);로 사용하고 .call 같은 경우는 쉼표를 이용(ex)add.call(obj, 2,8);해 사용한다. 추가로 배운 .bind 같은 경우는 함수를 바로 실행시키지 않고 this 같이 바인딩된 함수를 리턴한다고 한다. 함수 자체를 리턴하는 클로저와 비슷한 성격을 가지고 있다고 볼 수 있다.

 

.call 같은 경우 보통 사용을 하게 되면 아래의 코드처럼 배열이 아닌 유사 배열에서 map 기능을 사용할 수 있게 해 준다던지 할 수 있다.

1
Array.prototype.map.call(list, getElementId);
cs

.bind 같은 경우 특정 함수가 this 값을 바꿔 버리는 경우에 사용되는데 아래 코딩은 실행이 되지 않게 된다.

1
setTimeout(box1.printArea,4000);
cs

그 이유는 setTimeout의 경우, 인자로 넘기는 함수 this는 기본적으로 window 객체가 바인딩되기 때문이다.

즉, this 값이 window로 들어가지 않도록 명시적으로 this 값을 인스턴스 b로 지정하여야 한다.

1
setTimeout(b.printArea.bind(b),4000);
cs

그리고 인자 두개를 받는 함수에서 하나의 인자를 받는 커링을 구현하는 것으로도. bind를 사용할 수도 있다.

 

 

그리고 오늘 처음 배웠던 재귀 함수...

재귀 함수는 어렵지만.. 쉽게 이해하자면 쪼개서 생각하는 함수(?)라고 보면 된다고 한다. 어떠한 문제를 해결할 때 구조는 동일하지만 더 작은 경우를 해결 함으로써 그 문제를 해결하게 하는 방법... 실행 과정 중에 자기 자신을 호출하기도 하면 그렇게 결과 값을 도출해내는 것을 재귀 함수라고 보면 될 것 같다.

 

그렇기 때문에 보통 재귀는 해당되는 문제가 구조가 비슷하고 더 작은 문제로도 쪼갤 수 있으며 중첩된 루프가 있는 경우 사용하기 적합하다고 볼 수 있다. 솔직히 이전에 배웠던 for, while 문으로도 해결이 가능할 것 같지만 재귀 함수를 적절히 사용할 수 있다면 하드코딩이 아닌 보다 효율적인 코딩을 할 수 있을 것이다.

 

오늘의 백미였던.. Recursion 처음에 10분여 동안은 이게 도대체 뭘 하는 거지?라고 생각하면 멍 때렸던 것 같다.

stringifyJSON이 어떤 것인지 구글링은 해본 뒤에야 어떤 식으로 풀어 나가야 할지 하나씩 감을 잡았던 것 같다.

쉽게 말하면 자바스크립트 값을 JSON 문자열로 변환한다고 보면 되는데 더 자세히 말하면 Object 나 Array를 받았을 경우 모두 string으로 변환해주는 함수라고 보면 될 것이다.

보통은 이렇게 사용되는 함수인데 JSON.stringify(value [, replacer [, space]]) 과제를 진행하면서 이런 개념의 함수가 존재한다는 것을 1차원적(?)으로 해결해 나간다는 것이 처음에는 힘들지만 이 것만큼 개념을 잘 이해할 수 있는 방법은 없으리라 생각한다.

내일까지 진행되는 부분이라 차근차근히 해결해 나가야겠다.

'개념정리' 카테고리의 다른 글

8/30[TIL]재귀함수  (0) 2020.08.30
8/29[TIL]고차함수 복습..  (0) 2020.08.30
8/19[TIL] 비동기 호출&타이머API&함수메소드  (0) 2020.08.19
8/18[TIL] underbar 과제  (0) 2020.08.18
8/14[TIL] 고차함수  (0) 2020.08.14