본문 바로가기

프로그래밍

새로 들어오는 카뎃들을 위한 libft 가이드

서문

다다음주에, 그리고 앞으로 42서울에 들어올 피씨너에서 카뎃으로 변신한 여러분! 이미 슬랙에서 신나게 축하했겠지만, 다시 한번 축하드립니다.

 

11시쯤 같이 밥 먹을 사람 없는데 제가 서초에 있으면 dm 주세요! 그 시간에 밥 먹는 사람이 별로 없어서 맨날 혼자 먹습니다.

 

dm 주셔도 밥은 못 사드리고 그 대신 대망의 첫 과제, libft의 가이드를 드리겠습니다. 다만, 제가 하는 방식은 깊게 파는 쪽이라 효율적이진 않습니다. 그러다 보니 과제를 후딱 끝내고 넘어가려는 분들에겐 별로 적합하지 않을 수도 있습니다.

 

'난 네가 과제하는 방식은 안 궁금하고 그냥 어떻게 풀었는지가 궁금해' 이 생각으로 들어오셨으면, 이 글보다는 제 [깃허브]를 읽으시는 게 빠를 것 같습니다. 

 

 

1. 서브젝트와 평가지 분석.

저는 과제를 시작하면 과제 내용과 평가지를 먼저 읽습니다. 우선 과제 내용을 먼저 보겠습니다. 슬랙을 유심히 보셨으면 누군가가 서브젝트를 한글로 볼 수 있는 방법들을 알려줬을 텐데, 이 과제는 한글과 영어가 큰 차이가 없지만 그래도 한글로 보는 게 편하긴 합니다.

 

과제를 읽으면서 한 글자도 빠짐없이 전부 이해하기 위해 노력해봅시다. 읽으면서 이해가 가지 않는 부분은 꼭 정리해둡니다. 나중에 따로 찾아봐도 좋고, 아마 대부분은 과제를 하면서 자연스럽게 이해가 될 텐데, 끝까지 모르겠으면 옆 사람이나 슬랙에 물어보거나 다른 사람의 과제를 평가 갔을 때 피평가자에게 물어보면 됩니다. 

 

과제를 진행하면서도 이해가 안 가는 부분은 꼭 적어둡니다. 나중에 평가받을 때 헷갈리면 평가자에 따라 fail이 나올 수도 있습니다.

 

이 과제는 libc 함수들을 직접 만들어보는 part1, 설명을 보고 함수를 만드는 part2, 그리고 list를 구현하는 bonus part로 나뉘어 있습니다.

 

예를 들어, part1에서는 '함수를 man에 정의되어 있는 대로 만들되, 'restrict'를 프로토타입에 사용하는 것은 금지된다.'라고 되어있으니 터미널에 man memset을 입력해서 살펴보고, restrict가 어떤 역할을 하는지 구글에 찾아보는 식으로 하나씩 공부하면 됩니다.

 

이 과제는 평가지에서 함수들이 잘 작동하는지, 피평가자가 잘 설명하는지만 확인하기 때문에 별다른 건 없습니다. 서브젝트만 공부하고 넘어가면 되겠네요.

 

2. 과제 진행.

서브젝트를 다 이해했으면 함수를 하나씩 만들어봅시다.

 

여기에도 여러 방법이 있겠지만, 저는 우선 다른 참고자료 없이 man 설명만 보고 풀어보는 게 뭔가 더 공부가 되는 기분이 듭니다.

 

man 만 읽고 part1을 다 만들었다면, 테스터기를 찾아서 돌려봅니다. 저는 과제 도중엔 [이 테스터기]를 사용했습니다.

 

테스트기 결과를 보고 어떤 함수가 정확히 작동하고 어떤 함수가 man에 적힌 대로 동작하지 않는지를 살펴봅니다. 

 

맞왜틀(맞는데 왜 틀리다고 나오지?)을 외치면서 하나씩 고치고 테스터기 돌리고를 반복합니다. 

 

두 번 이상 봤는데 진짜 맞는 거 같고 도저히 뭐가 틀렸는지를 모르겠으면 제 [노션]의 디버깅 내용을 읽고 고치시고, 여기에 없으면 다른 사람이나 저의 [깃허브]의 코드를 보고 고칩니다.

 

저는 깃허브를 보고 코드를 그대로 베낀게 아니면 치팅이 아니라고 생각하기 때문에 이렇게 얘기하지만, 사실 누군가 보면 치팅이라고 생각할 수도 있습니다. 치팅이라는 생각이 드시면 노션의 디버깅 내용만 보시거나 테스터기의 코드를 보고 분석하거나 다른 테스터기를 돌려서 해답을 찾아보시는 게 좋습니다.

 

part1을 이런 식으로 끝내셨으면, part2와 보너스는 별거 아닙니다. 금방 끝낼 수 있습니다.

 

다만, makefile은 조금 어렵긴 합니다. 잘 모르겠으면 [팔만대장경]이나 다른 사람의 메이크 파일을 참조하면 더 쉽게 이해할 수 있습니다.

 

3. 평가준비

여러 개의 테스터기에서 전부 이상이 없다면 과제를 완성하신 겁니다. 이제 평가받을 준비를 합시다.

 

서브젝트 분석 때나 과제를 진행하면서 적어둔 의문점들에 전부 해답을 달아두고 한 번씩 더 생각해봅시다. 

 

평가지에 나와있는 순서대로 코드를 보면서 평가처럼 다른 사람에 설명하듯이 말해봅시다.

 

이건 정말 비밀인데... 과제 문의 채널에 from:@youjeon libft으로 검색하면 나오는 스레드의 댓글들을 살펴보면서 혹시 놓친 건 없는지, 이 스레드의(저 포함) 승냥이 떼들에게 물려가도 정신을 똑바로 차릴 수 있을 것인가를 생각해봅시다.

 

그다음 norm 체크 한번 더 하고 과제 git clone 도 한번 더 해보고 아무런 문제가 없다는 생각이 들면 Set the project as finished 버튼을 누르고 평가를 잡고 마무리하시면 됩니다. 여기서부터는 피씬때 많이 해보셨을 테니 잘하시리라 믿습니다.

 

 

결론

이건 제가 지금 과제하고 있는 방식이고, libft를 할 땐 이렇게 못했습니다. 노션을 보면 아시겠지만 거의 비슷하긴 한데, 어떻게 해야 더 공부가 많이 될까를 나중에 생각해서 덧붙여진 내용이 있습니다. 그러다 보니 내가 지금 다시 libft를 한다면? 이라는 생각으로 생각하면서 글을 적게 된 것 같습니다.  

libft는 쉬운 과제이지만 처음의 막막함이 조금 컸던 것 같아서 가이드를 쓰고 싶었는데, final exam 봉사 다녀와서 생각나서 쓰다보니 그 느낌을 다 까먹어갈 때 쓴 게 아쉽네요.

 

덧붙이면, 과제를 이렇게 잘게(여기서는 서브젝트 확인 - part1 진행 - 디버깅 - part2 진행...) 쪼개서 진행하는게 도움이 많이 됩니다. 막막한 과제도 쪼개다 보면 하루에 얼마큼씩 해야겠다는게 나와서 더 의지를 가지고 진행할 수 있습니다. 

마지막으로 앞에서 한 얘기지만 환영합니다. 이 글이 꼭 도움이 되었으면 좋겠습니다!