favicon

Jayden { do: smite }

230722(토)

🚤 성장일지 6.0

행복한 이기주의자(웨인 다이어)의 내용에 자극받아 시작하는 소박한 성장기록

살아있는 꽃과 죽은 꽃은 어떻게 구별하는가?<br/> 성장하고 있는 것이 살아 있는 것이다.<br/> 생명의 유일한 증거는 성장이다!

🌾 (4.0)학습 키워드에서 최대한 간단한 정보 제공, 고민에서 내 경험을 자세히 적자!<br/> 🥊 (5.0)학습 키워드는 한줄의 핵심으로만 정리, 성공/실패 일지 작성하기! 이 때, 실패의 경험은 자세히 적기!<br/> 🍉 (6.0)<완전 개편!!!> 매일 습관적으로 핵심만 적을 수 있게 프레임 변경. 성공보단 실패에 초점을 맞추기.<br/>

  • 🍉 (6.1)<수정> 매번 성공, 실패를 따로 적는 것보단 경험으로 표현하자

🌈 오늘의 감정

뭔가 그래도 고민을 끝내고 방향을 잘 잡아서 가는 것 같아서 기분이 좋다. 지금 이 분야가 너무 좋은 만큼 방향이 조금은 잘못되어도 괜찮으니(사실 옳은 방향이란 거 자체가 없으니까) 열심히 꾸준히 잘 나아가자. 그리고 내가 원하는 삶을 살면 된다. 이미 이 개발 세상을 알게 된 것만해도 반은 성공이니까!

🫧 오늘의 고민

A라는 함수에 대한 test 코드 작성 시, B라는 함수에 의존하는 건 괜찮은가?

오늘 LinkedList를 직접 구현하고 모든 메서드에 대해서 test 코드까지 작성해봤다. 그런데 테스트 코드 내에서도 메서드 사용에 대한 의존성이 생기는 것 같아서 조금 고민이 됐다. 예를 들면 아래의 코드와 같다.

describe("LinkedList의 deleteAt을 통해 데이터를 특정 index에서 제거할 수 있다.", () => { const list = new LinkedList(); list.insertLast(0); list.insertLast(1); list.insertLast(2); list.insertLast(3); list.insertLast(4); test("list의 0번째 값을 제거하면 data 0의 값을 가진 Node가 반환된다..", () => { const deletedValue = list.deleteAt(0)!.data; expect(deletedValue).toEqual(0); }); test("list의 2번째 값을 제거하면 data 3의 값을 가진 Node가 반환된다.", () => { const deletedValue = list.deleteAt(2)!.data; expect(deletedValue).toEqual(3); }); });

위 코드는 LinkedList의 deleteAt 메서드를 테스트하는 코드이다. 그런데 이 테스트 코드는 LinkedList의 insertLast 메서드에 의존하고 있다. 그래서 만약 insertLast 메서드가 잘못 구현되어 있다면 deleteAt 메서드를 테스트하는데 문제가 생길 수 있다. 이런 경우에는 어떻게 해야할지가 오늘 가장 큰 고민이었다. 고민에 대해 찾아본 결과 아래와 같은 방법들이 있었다.

  • 테스트 대상 함수가 의존하는 함수를 테스트하는 코드는 별도로 작성한다.
  • 테스트 대상 함수가 의존하는 함수를 테스트하는 코드는 테스트 대상 함수를 테스트하는 코드보다 먼저 작성하고 실행한다.
  • 테스트 코드에서는 테스트 대상 함수만을 테스트하고, 테스트 대상 함수가 의존하는 함수는 mock 함수로 대체한다.

1번과 2번의 방법은 이미 작성해두어서 이렇게만 해도 의존하는 메서드에 대해 test가 된거니까 괜찮겠지? 생각은 했다. 다음엔 3번 방법으로 mock 함수를 적용해봐야겠다.

☀️ 오늘의 경험

자료 구조를 구현하고 테스트 코드를 작성한 경험

간단한 util 함수에 대해서 테스트 코드는 작성해봤지만, 이렇게 하나의 자료 구조를 구현하고 메서드들을 전부 테스트 코드로 작성해본 경험은 처음이었다. 덕분에 이제 공식문서를 보지 않고 어느정도 테스트 코드를 작성할 수 있을 것 같다. 솔직히 테스트 코드가 조금 귀찮긴 했지만, 실제로 테스트 코드를 작성하는 와중에도 리팩토링하는 데에 도움이 많이 돼서 이래서 테스트 코드를 작성하는구나 싶었다.

함수형 프로그래밍: 액션과 계산, 데이터

쏙쏙 들어오는 함수형 코딩을 보면서 코드에 대한 관점을 새롭게 정립하고 있다. 객체지향을 처음 어느정도 이해했다고 느꼈을 때도, 너무 신세계였는데 지금 함수형 또한 그런 느낌이다. 생각해본 적이 없던 방식으로 코드를 짜고 바라보게 되니까 너무 신선하고 재미있다. 그나마 리액트가 함수형을 많이 닮아 있어서 그런지 이해하기가 조금 더 쉬운 것 같다. 더 열심히 공부해서 함수형에 대한 이해도가 높아지고, 실제 리액트 코드를 작성함에 있어서도 실력이 늘었으면 좋겠다.

🐾 오늘의 교훈

세상에 의미없는 시간은 없다. 내가 겪는 모든 시간과 경험들이 쌓이고 쌓여서 반드시 빛을 낸다. 이건 부정할 수 없는 사실이다. 그저 나를 믿고 나의 길을 나아가자!

🪵 참고

undefined

Copyright 2023. all rights reserved by Jayden