본문 바로가기
Development

[19.11.17] TIL, 개인 코드 리뷰.

by igy95 2024. 1. 6.

 

 

_.reduce 메소드

현재 나는 array의 내장 메소드를 이용하지 않고 함수를 새로 작성하여

기존의 메소드와 동일하게 작동이 되게끔 만드는 과제를 진행하고 있다. 위의 코드는 그 중 하나의 코드를 발췌한 것이다.

 

-테스트 케이스

input으로 주어진 element를 차례대로 iterator에 넘겨줄 수 있어야 한다.

iterator가 undefined를 return 하더라도 계속해서 iterator를 실행시킬 수 있어야 한다.

Accumulator가 주어지지 않았을 때는 input으로 주어진 배열의 첫번째 값을 accumulator로 사용해야 한다.

Accumulator가 주어지지 않았을 때는 배열의 두번째 값부터 iterator에 넘겨줄 수 있어야 한다.

 

위 테스트 케이스를 기반으로 코딩을 하며 내가 중점적으로 생각한 건

1. accumulator가 주어지지 않았을 때 (accumulator === undefined)

2. accumulator가 주어졌을 때

 

두가지 양상으로 나누어 생각해 if, for문을 작성했고 초기값이 주어지지 않을 때 배열의 첫번째 원소를 초기값에 대입 후에 함수 처리될 원소들을 최종값으로 도출해낼 수 있도록 코드를 작성했다. 초기값이 주어졌을 때는 임의로 대입을 하지 않고 그 전과 비슷하게 코드를 작성했다.

 

 

_.extend, _.default 메소드.

꽤나 애를 많이 먹었던 메소드이다.

내가 여기서 접근하기 어려웠던 부분을 먼저 간추려보자면

1. for문 안에서 객체의 키를 도대체 어떻게 반복해야 할 것인가? (let key in obj)

2. parameter로 주어진 인자가 obj 하나인데, 그 뒤에 들어오는 다중인자는 어떻게 처리할 것인가? (ellipsis, arguments)

3. 최종적으로 return할 값은 어디에 작성할 것인가?

 

-테스트 케이스

input으로 받은 객체들의 property를 첫번째 객체에 추가해야합니다.

input으로 받은 객체들이 같은 property를 가지고 있을 때 나중에 나온 객체의 property를 사용합니다.

input으로 받은 객체들이 같은 property를 가지고 있지 않으면 먼저 나온 객체의 property를 수정하지 말아야합니다.

input으로 세 개 이상의 객체를 받는 경우를 다룰 수 있어야합니다.

input으로 세 개 이상의 객체를 받았을 때 객체들이 같은 property를 가지고 있을 때 나중에 나온 객체의 property를 사용합니다.

 

이 메소드는 페어 프로그래밍을 통해 협업으로 이루어낸 결과라 더 뿌듯했다.

위의 코드를 설명하자면, extend와 default의 차이점은 두 개 이상의 객체가 있을 때 동일한 key값을 어느 객체에서 사용하나, 가 관건이었다. 이 메소드에서 ellipsis와 arguments에 대해 알지 않으면 풀 수 없는 코드들이 있었는데 나 같은 경우에는

 

1.  ellipsis로 가변인자를 설정 후에

2. sources안에 들어올 많은 객체 인자들을 for문으로 돌리고,

3. 그 객체 각각의 키값을 첫번째 obj와 비교해 덮어쓸 것인지, 없는 건 추가할 것인지 

 

이러한 의도를 가지고 코드를 작성했다. 코드를 모두 맞게 작성했지만 풀리질 않아 애를 먹고 있었는데 페어의 코드와 비교해 보니 내가 return 값을 for문 안에 써놓아서 코드가 작동되질 않았던 것이었다. 아무리 맞는 로직을 처음부터 끝까지 쓴다고 하더라도 코드의 문법에 맞게 끝까지 집중할 수 있는 힘이 필요하다는 것을 여기서 느꼈다.

 

_.once 메소드.

개인적으로 제일 난관인 부분이었다. 그 이유는 여러 개념에 대한 숙지 부족과 접근 방법을 아예 생각하지 못했기 때문일 것이다.

페어분이 도와주셨는데 많이 답답해하셨을 거다. 그래도 혼자 풀 때보다 훨씬 이해가 잘되고 오래 남을 듯해 다행이다.

 

-테스트 케이스.

리턴 된 함수가 이전에 한 번도 호출된 적이 없을 때만 함수를 실행합니다.

리턴 된 함수에 input으로 주어진 arguments를 정확히 전달해야합니다.

리턴 된 함수가 여러번 호출되어도 항상 첫 번째 호출되었을 때의 결과값을 리턴해야 합니다.

 

여기서 제일 중요했던 부분은

* 이전에 호출된 적이 없을 때만 함수를 실행한다.

 

이 부분이었기 때문에 스코프와 클로저 모듈 패턴에 대한 이해가 시급했다.

페어 분의 도움으로 나의 의도와 목적을 정리할 수 있었다.

 

1. 내부 함수와 외부 함수의 선언이 같을 시, 내부 함수 선언의 변화는 외부 함수 선언에도 영향을 끼친다.

2. 내부 함수는 외부 함수 선언에 대해 접근(값을 가져와 쓸 수)할 수 있다.

 

현재 코드의 작동 방식을 설명하자면 아래와 같다.

1. 첫번째로 코드를 작동시켰을 때: 외부 함수의 선언들이 리턴으로 도출 될 내부 함수 내에서 역할한다.

alreadyCalled가 false이기 때문에 result를 함수처리 후 alreadyCalled를 true로 만들어준다.

 

2. 두번째부터 코드를 작동시켰을 때: 외부 함수 선언의 alreadyCalled는 true로 바뀌고, result는 함수처리가 한 번 된 상태이다. 내부 함수를 계속 발동시켜도 alreadyCalled는 계속 true값이기 때문에 result는 변함 없을 것이다. 내부 함수의 parameter 또한 복수 형태의 가변 인자가 들어갈 수 있기 때문에 ...nums을 넣어주었다.

 

페어를 하며 단순히 문제를 풀기 위한 코드를 작성하는 것 뿐 아니라,

다른 사람들과 협업을 위해 내가 어떤 생각으로 지금의 코드를 짜는 것인지 설명할 수 있어야 함을 확실히 느낀 하루였다.

'Development' 카테고리의 다른 글

[19.11.26] TIL, pre course 과제 완료.  (1) 2024.01.06
[19.11.19] TIL  (0) 2024.01.06
[19.11.14] 대외활동 탐색.  (1) 2024.01.06
[19.11.12] TIL, 학교 면접 준비.  (0) 2024.01.06
[19.11.11] TIL, BASIC 과제 완료.  (0) 2024.01.06