본문 바로가기
일기장/우아한테크코스

[우아한테크코스] 노베이스 비전공자 우테코 4주차 회고 (실제로 제출한 회고록 포함)

by 반달bear 2022. 11. 24.
반응형

Maker-H/java-bridge (github.com)

 

내가 작성한 코드를 보고 싶다면 Maker-H 브랜치로 들어가면 된다. 

 

4주차 미션은 다리 건너기 게임이었는데 미션 읽고나서 솔직히 그만해야 하나 했었다ㅋㅋㅋ 미션 보자마자 '와..이건 어캐 짜야됨?' <-의 생각이 들었고 한창 '객체지향의 사실과 오해'라는 책을 읽고 있었는데 절차지향에서 객체지향으로 사고방식을 바꾸려다보니 그 중간에 걸려서 이러지도 저러지도 못하고 있는 상태였달까.

 

이제까지 코딩 어떻게 한지도 모르겠고 나는 누구고 여긴 어디고 난 뭘하고 있었지....의 상태였었다. 

 

근데 어떻게 하다보니 성공했고 그것도 멘붕상태였던거 치고 굉장히 빨리 성공했다.

 

거의 포기하다시피 중간에 워킹데드도 몇 편 보고 코딩하다 도저히 못하겠다 싶으면 게임도 하고 그랬는데 그렇게 논거 치고 이틀만에 테스트를 통과했다.

 

그 전까지는 항상 테스트케이스에서 에러가 떠서 이번에도 뜨겠지...아 진짜 싫다 이러면서 테스트케이스를 딱 돌렸는데 한방에 통과가 됐고 진짜 순간 너무 북받혀서 좀 울었다. 글 쓰는 지금도 좀 울컥하는데 한 달동안 알게 모르게 맘고생 많이 했나보다..ㅎㅎ

 

그래도 나름 올솔했다!!!!!!!

 

이 글을 읽으실 비전공자분들께

저는 과제를 시작할때 반복문 조건문 정도만 아는 상태였고. 자바 컬렉션프레임워크가 뭔지, 람다가 뭔지, 스트림이 뭔지, 제네릭이 뭔지는 과제를 하면서 공부했습니다.

아는게 많이 없는데 프리코스를 따라갈 수 있을지 걱정하는 노베이스 비전공자분들이 많으실 것 같습니다.

정말 모든 시간을 투자할 자신이 있으시다면 기초 문법만 아셔도 충분히 프리코스를 완주하실 수 있다고 생각합니다.

저의 경우 정말 4주를 온전히 우테코에만 투자했습니다.

눈 뜨면 코딩하고 급격히 허기지면 밥 먹고 다시 코딩하다 밤새고.. 시간을 모르게 4주가 지났고 회고록에 해가 지는지 뜨는지도 몰랐다고 적었는데 말 그대로 집 밖에 나간 기억이 손에 꼽습니다. 4주 동안 집 밖에 장보러 딱 4번 나갔던 것 같습니다.

물론 더 똑똑하신 분들은 수월하시겠지만 저는 그 정도로 시간을 투자했습니다.

다만 '테스트만' 통과하실 목적이면 이렇게까진 안하셔도 될 것 같습니다. 저 같은 사람도 올솔 할 수 있었으니 다들 도전해보셨으면 좋겠습니다!!

 

 

긴 글 읽기 싫은 분들을 위한 세 줄 요약

1. 객체 지향적으로 생각하느라 고생 많이 했다.

2. 다음 과제가 없는게 아쉽다.

두 줄밖에 안되넹?

-끝- 

 

 

💡 이번 주차의 주제는 객체의 관점에서 생각해보기 인거 같습니다. 저번 주차 까지만 해도 객체가 ‘클래스’라고 생각했습니다. 그래서 클래스 관점에서 프로그래밍을 하며 객체 지향 프로그래밍을 한다고 생각했는데 제가 해 온 사고방식이 굉장히 절차적이라는 것을 깨달았습니다. 저번 주차까지는 클래스를 하나 만들면 바로 Application에 클래스를 선언하고 그 다음으로 필요한 클래스를 하나 만들고 또 Application에 클래스 선언을 추가하는 식으로 전체적인 플로우를 생각하며 차곡차곡 쌓듯이 프로그램을 만들었습니다. 하지만 그러한 방식이 절차 지향적이었음을 깨닫고 이번 과제야 말로 객체 지향적으로 생각해보려고 노력해봤습니다.

객체를 중심으로 사고한다는 것이 막막하게 느껴졌지만 ‘객체지향의 사실과 오해’라는 책의 객체의 재사용성이라는 단어에서 힌트를 얻었습니다. 그래서 스스로 결과를 예상하지 않고 마음이 내키는 기능 한가지를 정해 그 기능에만 집중한다는 행동의 제약을 걸었습니다. 이전까지는 지어진 집의 이미지를 생각하며 바닥부터 벽돌을 쌓아나가듯이 프로그램이 실행되는 input->domain->output의 순으로 클래스를 쌓아나갔지만 이번에는 집을 다 부수고 마음이 가는대로 문 한 짝, 굴뚝 하나를 만든다고 생각하며 여러 기능들 중 제가 만들고 싶은 기능부터 만들기 시작했습니다.

그렇게 컴퓨터 앞에 앉았는데 불확실성을 견뎌야 해서 그런지, 평소의 절차적 사고와 전혀 다른 관점의 흐름으로 사고해야 해서 그런지, 머리가 백지가 되었습니다. 이제까지 프로그래밍을 어떻게 했나 싶은 정도의 막막함이 느껴졌습니다. 그래서 그나마 생각없이 만들 수 있는 readline을 포함하는 input 기능들부터 만들기 시작했습니다. 해당 기능을 완성하자 list를 생성하고 인터페이스만을 고려하면 되는 BridgeMaker에 손을 댈 수 있었고 그렇게 하나씩 하나씩 만들다보니 도메인에 도전할 용기가 생겼었습니다.

뇌과학적으로 무언가를 못하는 것은 ‘못하는 것’이 아니라 ‘익숙하지 않은 것’이라는 글을 본 적이 있습니다. 저에게 객체지향은 익숙하지 않기도 하지만 그보다 ‘무서운 것’에 더 가까웠던 것 같습니다. ‘내가 결과를 생각하지 않고 선언한 파라미터가 혹은 메소드가 메인메소드에서 실행이 되지 않으면 어쩌지, 처음부터 끝까지 전부 어긋난 리턴값과 파라미터들로 이루어져 있어서 만들지 않으니만 못하게 만든 상태가 되면 어쩌지’가 제가 객체지향을 무서워하는 이유입니다. 제가 잘못된 상태임을 인지하지 못한채로 시간이 지나가는 것이 무서워서 객체 지향적으로 무언가를 하는 것에 굉장한 두려움을 느끼며 과제를 했습니다. 구현에 대한 걱정이라기보다 저 자신의 불안과 싸웠던 한 주였던 것 같습니다.

이번 과제를 마치며 리팩토링이란 어떤 것인가에 대한 생각을 다시 해보는 계기가 되었습니다. 1주차, 2주차, 3주차 과제 모두에서 실행 시간이 초과되었다는 예외가 발생하여 코드의 무게를 줄이는데 시간이 많이 소모하였었습니다. 하지만 이번에 객체 하나하나를 만들다보니 코드적으로만 본다면 중복되는 코드들이 있었는데도 불구하고 실행 시간이 초과되었다는 예외가 발생하지 않았습니다. 속도를 줄이는데는 중복되는 코드들을 덜어내는 것이 중요하다고 생각했는데 이번 과제를 수행하며, 지난 주차의 피드백 문서를 읽으며, 또 객체에 대한 의문을 해소하기 위해 객체 지향에 관한 책들을 읽으며 좋은 코드란 무엇인지 또 리팩토링은 무엇인지 대한 저의 생각을 다시 정립하려 합니다.

‘객체를 지향하다’라는 것을 완벽하진 않겠지만 조금이나마 경험할 수 있어 다행스럽습니다. 앞으로도 객체적으로 사고하려고 노력할테지만 제가 작성한 코드들을 돌아보니 솔직히 이번에 주어진 클래스들과 메소드들이 없었다면 제가 과연 객체를 객체스럽게 볼 수 있었을까 의문이 듭니다. 만약 다음주차가 있었다면 정말 ‘도메인’ 로직이 어떤 것인지 생각하며 책에서 읽은 도메인 모델, 유스케이스 모델을 적용해 볼 수 있을텐데 다음 과제가 없다는 점이 많이 아쉽습니다.

이번 과제를 완성하자 4번의 과제가 정말 세심하게 짜여져 있었다는 생각이 들었습니다. 우아한테크코스를 시작할때만 해도 합격여부를 떠나 1달의 여정을 통해 성장하기 바란다는 말을 듣고 솔직히 합격 여부가 중요한 시험에서 성장을 말하는 게 말이 안된다고 생각했습니다. 하지만 4주차를 지난 지금은 1달간의 여정이 막연하게 느껴졌던 OOP, TDD, 클린코드라는 개념들을 경험해 볼 수 있는 소중한 기회들이었음을 압니다. 매주 ‘계속 이러면 까딱하게 죽겠는데?’ 싶은 날들의 연속이었지만 단순히 코딩 내지 구현이 아니라 어떤 프로그래밍을 지향해야 하는가를 느낄 수 있었던 감사한 시간들이었습니다.

 

반응형

댓글