(멘토단 의견) 본 과제는 7 일짜리 과제로 혼자 학습을 하는 경우 멘토단은 21일 정도 걸린다고 예측했습니다. 신입사원에게 해당 문제를 내주었다고 가정함. 2020 년에는 대부분 코로나 때문에 "고립학습"을 했는데, 평균 소요일수가 38일이었습니다. 42 캠퍼스 내에서 동료학습에 집중하니 소요일수가 10배가 빨랐습니다. 학습 후 확인되는 역량 경험은 비슷했습니다.
- 동료학습 챌린지 by kunlee
- 동료학습 챌린지 by juahn
- 동료학습 챌린지 by joonpark
1일차
5월 31일 9시부터 시작한 ft_printf를 최대한 빨리 통과하는 미션은 예상대로 어려웠습니다.
전날 printf를 어떻게 구현할 것 인가에 대해 고민하고
전체적인 구조에 대해서 얼추 틀을 잡아놨었는데도 불구하고
플래그와 폭, 그리고 정밀도 같은 옵션의 조합이 너무 많아보여
무엇부터 손대야 할지 감이 잘 잡히지 않았습니다.
일단 “뭐라도 되게 하는 것”이 첫날 목표였기 때문에,
무작정 결과값을 받아보기 위해서'-'
플래그의 구현과 c
, s
, d
서식 지정자를 구현하고
결과 값이 printf와 동일하게 나오는지 확인했습니다.
많은 플래그와 서식지정자를 다루면서 norm 체크도 성공시켜야하니
코드들을 좀 더 다듬고 일종의 모듈화 하는 작업이 필요해 보였지만
앞이 막막해서 이날이 제일 걱정이 컸던 것 같습니다.
2일차
2일차는 제 생각이 완전히 틀렸다는 것을 알게 된 순간이었습니다.
서식 지정자를 일단 구현하고 플래그를 구현하려고 했는데,
그 두 개가 분리될 수 없다는 사실을 그제야 깨달았습니다.
일단 '-'
플래그를 구현했기 때문에 c를 처리하는데는 문제가 없었고,
s에 들어가는 정밀도 규칙도 문자열의 최대 출력 갯수를 정해주면 되는 문제여서
구현에 큰 문제는 없었던 것 같습니다.
하지만 그 뒤에 남아있는 숫자를 처리하는 d
를 비롯한 서식 지정자들은
맨데토리 파트에서 요구하는 플래그, 폭, 정밀도 옵션을 모두 받아서 처리해야 하기 때문에
난이도가 급상승 했습니다.
그래서 2일차에는 포맷태그가 아닌 문자들을 그대로 출력하는 것,%
를 발견하면 포맷 태그를 읽어 플래그와 폭, 서식지정자를 판단하는 것,
그리고 읽어낸 포맷 태그를 기준으로 가변인자로 받은 데이터를 처리하는 로직을 구성하고c
와 s
의 구현까지 끝내고 마무리 했습니다.
3일차
3일차는 제가 가장 힘들었던 날입니다.d
서식 지정자를 처리하는데 하루를 꼬박 다썼는데,
다른 두 분은 감을 잡아서 빨리 하신 반면에
저는 많이 헤매게된 시간이었습니다.
3일차 초반에는 jeonhyun님이 알려주신 방법대로 해서
리턴값을 받아오는 부분은 정말 빠르게 해결해서 기분이 좋았는데,
d를 처리하면서 초반에 최종적으로 어떻게 출력할 것인가에 대한 고민을 많이 하지 않고
주먹구구식으로 시작했던 것이 큰 문제가 됬습니다.
하나를 고치면 하나가 문제가 생기고,
하나를 고치면 또 문제가 생기는 식으로 오류가 발생해서,
점점 제 자신이 방향성을 잃어가는 느낌이 들었습니다.
그때 jeonhyun님이 본인이 과제를 할 때
어떤식으로 처리했는가에 대해서 알려주신 것에서 답을 얻었습니다.
생각해보니 필수 파트에서는 zero가 얼마나 출력되어야 하는지에 대한 계산만 된다면
출력을 전부 정상적으로 할 수 있었습니다.
그래서 저녁 때까지 조건들과 씨름해가면서
결국 10시쯤에 d u i를 구현하고
x도 반정도 구현하고 집에 갈 수 있었습니다.
4일차
4일차는 가장 큰 카타르시스를 느낄 수 있었던 날입니다.
멘토를 해주신 분들이 말해주신대로 d를 구현하고 나니
나머지 문제들은 생각보다 금방 금방 해결을 할 수 있었습니다.
p의 구현에서 조금 애먹긴 했지만,
결국 0x를 출력해주는 것과 0를 출력할떄와 출력하지 않을때에 대한 규칙을 이해하고
3시쯤에 완성을 했습니다.
그리고 나서 테스터기를 돌렸는데 모든 서식지정자가 통과하고
리턴값도 정상적으로 받는 것을 확인했을 때의 기쁨은
정말 이루 말할 수 없었습니다.
다른 테스터기도 돌려보자고 하셔서 일괄로 돌렸는데,
다른 테스터도 모두 한번에 통과하는 것을 보고 정말 믿기지 않았습니다.
‘이걸 해냈구나!’하는 생각이 먼저 들었고,
한편으로는 놈을 고려하지 않고 각 부분을 함수화 하지 않은 체로
엉망인 코드들을 보면서 어떻게 리팩토링 해야하나… 하는 생각이 들었습니다.
하지만 joonpark님과 kunlee님은 그때쯤 통과하셔서 놈과 싸우고 있는 저를 도와주러 오셨고,
jeonhyun님도 도와주셔서 제가 더 헤매지 않고 모든 함수와 코드를 정리 할 수 있었습니다.
제가 마무리 확인 할 때 까지 옆에서 응원해주시고 도와주셔서 정말 고마웠습니다.
옆에서 같이 하는 동료가 없었다면
저는 절대 4일만에 완성하지 못했을 것이라는 확신이 듭니다.
끝으로

평소에 많이 게으른 편이라,
“해야만 하는”상황에 저를 던져놓아야 열심히 하는 것을 알기 때문에
이번에 ohjongin 멘토님이 이벤트를 여신 것을 보고
꼭 해야겠다는 생각이 들었습니다.
결과적으로 좋은 결과와 많이 성장하는 계기가 되어서 정말 기쁘고 또 감사합니다.
사실 printf에 대해서 제일 궁금했던 것은,
정해지지 않은 인자의 수와 타입을 어떻게 받아서 처리하는 지에 대한 것이었습니다.
그리고 그것에 대해서 배울 수 있는 과제가 이 prinft 과제라고 생각을 했고,
확실히 과제를 수행하면서 가변인자가 어떻게 인자를 받고
그것을 메모리 영역에 저장하는지에 대해서 배울 수 있었습니다.
그리고 과제를 하면 할수록 다른 궁금한점이 생기는 것이
끊임없이 달릴 수 있게 만드는 중요한 부분이 아닐까 싶습니다.
저는 처음에 printf가 가변인자 함수를 써서 구현된다는 것을 알게 되고,
가변인자 함수는 고정 인자를 기준으로 다양한 타입의 가변인자들을 다룰수 있게 된다는 것을 알게 되었습니다.
그 다음에는 가변인자를 다루는 함수들은 또 어떻게 구현되는지에 대한 궁금증이 생기고,
또 과제를 더 진행해보면 printf가 undefine된 명령도 경고 문구가 뜨긴 하지만,
실제로는 출력을 잘 해내는 것은 어떤 원리로 가능한건지에 대한 궁금증이 생기게 되었습니다.
그리고 이번에는 필수파트만 구현했지만
보너스 파트까지 고려한다면 전체 설계를 어떻게 해야 할 것인가,
실수의 구현은 어떻게 이루어져야 할까에 대한
고민도 해보게 되는 계기가 되었습니다.
생각과 고민, 지식이라는 것은 항상 꼬리를 물면서 이어지다가
마지막에는 하나로 이어져서 원을 이루게 된다는 생각을 많이 하곤 했는데,
“은하수를 여행하는 히치하이커를 위한 안내서”에서도
Deep Thought가 “삶, 우주, 그리고 모든 것에 대한 해답”으로 “42”라는 숫자를 내놓은 것도
그런 맥락이 아니었을까 싶습니다.
앞으로 42Seoul에서 제가 배우게 되는 것들도
서로 다른 선들이 꼬리를 물며 나아가다가
하나의 원을 그리면서 이너서클과 아우터 서클을 만들고,
나중에는 저만의 서클도 만들수 있게 되었으면 좋을 것 같습니다.
좋은 기회를 주신 ohjongin 멘토님,
그리고 가르쳐 주시느라 4일동안 고생하신
jeonhyun님, seocho님, hyahn님, samin님, seungyel님 정말 고맙습니다.
빛나는 실력을 가진 두 멘티 joonpark님과 kunlee님도
뒤늦게 따라가는 저를 도와주시느라 고생많으셨습니다.
감사합니다!!
끝.
Comments are closed.