경험이 많이 없는 저는 대체 뭘 공부해야 하고 어떻게 준비하고 어떤 경험들을 해야 좋은회사에 들어갈 수 있는지에 대해 전혀 몰랐습니다.
그래서 여러 검색들을 통해 많은 사람들이 추천하는 책을 사서 실습해보고 최대한 github을 많이 이용하면서 새롭게 배운 지식들을 정리하고, 복습하며 독학하고 있었습니다.
공부하면서 글로는 이해가 안되는 개념들은 주로 영상을 통해 이해하는 편인데요.
그중 유튜브 테코톡을 자주 애용했었기 때문에 우아한테크코스가 무엇인지는 알고 있었고, 우아한테크코스에 대해 알아보기도 하였었습니다.
그 당시 알아봤을 때는 비전공자는 지원할 수 없는 영역의 교육인지 알았었는데, 이번 우아한테크코스 5기 일정이 나오게 되면서 보니 비전공자도 지원이 가능했었습니다!
그래서 우아한테크코스5기 백엔드에 지원하기 위해 급하게 "자바의 정석"책을 구매해서 기초부터 차곡차곡 쌓으면서 공부를 하게 되었는데요.
처음에는 기존에 공부했던 자바스크립트와 너무 달라 많이 애를 먹었습니다...
하지만 인간은 적응의 동물이라 그런지 매일매일 정리하며 복습하고 여러 예제 테스트들을 변형해서 실행해보고 하니
어느 정도 감이 잡히더라고요.
그렇게 프리코스 기간까지 달리고 달리다가 드디어 기다리고 기다리던 대망의 프리코스가 시작되었습니다 ❗
1주차 프리코스 시작
1주차 프리코스 미션은 7개의 문제가 주어졌고, 각 문제들 마다 요구하는 기능 요구 사항들을 모두 해결하는 것이였습니다.
이제 내가 공부했던 개념들을 테스트해볼 때가 왔구나 ! 라는 생각에 기대되는 마음으로 문제를 하나씩 봤습니다.
근데 짧은 시간에 자바의 정석 2권을 다 정독하지 못해서였던 탓인지... 봤을 때 문제를 이해하기가 정말 어려웠습니다.
또, 독학할 때는 파일 구조가 그냥 단순히 몇 챕터엔 이 파일, 몇 챕터엔 이 파일 이런 식이였는데
온보딩 프로젝트를 import하고 파일 구조를 봤을 때 파일 구조가 어떻게 되어있는지 몰랐고, 테스트는 어떻게 돌리는지도 몰라 솔직히 기초적인 부분일 텐데 난감했고 막막했습니다.. ㅋㅋ 😂
그래서 이 1주차 미션을 과연 시간 안에 할 수 있을까에 대한 자신이 없어서 첫날부터 매일매일 새벽같이 팠습니다.
일단 기초는 모든 요구사항을 만족하는 것을 목표로 잡았고, 7문제들을 풀기 위해 해결해야 할 과정들을 레시피를 만들 듯이 나눠봤습니다.
모든지 막연하게 다 하려고 하다 보면 쉬울 일도 꼬일 때가 많더라구요 ?
그렇게 정해진 과정들을 순차적으로 하나씩 해결하다 보니 점점 순조로워졌고 하나씩 테스트 케이스가 되고,
마지막으로 모든 테스트 케이스가 통과했을 때 그 쾌감 성취감... 잊지 못합니다.. 🥰
이렇게 테스트를 돌려보는 것도 처음이어서 재미있었고, 마지막 1주차 제출 때 테스트 통과했다는 문구가 떴을 때
뭐랄까 7가지 병을 앓고 있다가 하나씩 병이 치유되는 느낌이었습니다. 😁
정말 뿌듯했습니다 내가 이 문제들을 다 풀다니! 😎
다른 사람들은 1주차가 정말 쉬웠을지 몰라도 아직 부족함이 많은 저에겐 정말 어려웠었거든요.. 하하
그렇게 1주차를 계기로 자신감이 생기기 시작했고 2주차 3주차 4주차가 지나면 얼마나 성장해있을까? 라는 기대감이 생기더라구요. 😀
1주차 프리코스를 통해 느낀 점들
비록 코딩테스트 문제로 이뤄진 1주차였지만 정말 배운점이 많았습니다. 처음 각 문제들을 구현할 때, 보고 딱 막막했던 이유는 아직 자바의 클래스들에 대해 다 알지 못했기 때문이었다고 생각이 드는데요 이번 프리코스를 통해 여러 컬렉션 클래스들에 대해 깊게 공부하고 정리하면서 한걸음 더 자바에 다가가게 된 시간이었습니다.
그 외에도 느낌점들이 많은데 1주차 피드백 내용들을 합쳐 크게 주제로 나누어 적어봤습니다.
자바 코딩 컨벤션을 지켜 코드의 가독성을 높이자
코드는 나혼자만 보는게 아니기 때문에 코드의 가독성은 중요합니다.
코드를 봤을 때 "이게 뭔 뜻이야?"라고 생각든다면 다른 사람이 코드를 해석하는데 한참의 시간이 걸리겠죠... 그렇기 때문에 남들도 보기 좋은 코드를 작성해야 합니다. 원래에도 코드는 남이 보기 좋아야 한다는 생각으로 가능한 예쁘게 코드를 짜려했었지만 이런 코드 작성 규칙이 있는지 처음 알게 되었습니다.
컨벤션은 프로그래머 끼리의 약속이라고 했기 때문에, 속한 팀마다, 조직마다, 회사마다 컨벤션이 다른데
우아한테크코스에서는 자바 코딩 컨벤션 가이드로 위 링크의 구글 스타일의 자바 컨벤션 링크를 제공해주었습니다.
위 컨벤션 규칙을 보면 규칙이 정말 많은데 규칙을 통해 어떤 코드 작성법이 보기 좋은 코드인지 알게 되었습니다.
또한 IDE에서 제공하는 자동 포매팅이라는 좋은 기능이 있는지도 첨음 알게되었는데,
이클립스에선 ctrl + shift + f , 인텔리제이에선 ctrl + alt + L을 통해 포맷 기능을 이용할 수 있습니다.
이 포매팅 기능은 개행이나 공백 추가 등이고, 단락(paragraph) 의 순서나 변수명 등 까지 수정해주진 않기 때문에
위의 자바 코딩 컨벤션 가이드를 통해 "보기 좋은 코드란 무엇인가?"를 공부해봅시다. ❗
변수나 메서드 이름이 길어져도 의도를 드러낼 수 있다면 이름이 길어져도 괜찮다.
저는 기존에 코드를 짤 때 주석으로 설명을 달아야 보기 좋은 코드라고 생각했었습니다.
그리고 변수나 메서드의 이름이 짧아야 좋은 것이라고 생각했습니다.
왜냐면 코딩테스트 문제들을 풀 때는 다른 사람들을 풀이를 봐도 항상 변수명이 짧았었기 때문에 그렇다고 생각하고 있었습니다. 근데 그게 아니였네요.. 🤔
모든 변수와 함수에 주석을 달기보다 가능하면 이름을 통해 의도를 드러내고,
변수나 메서드 이름이 길어져도 의도를 드러낼 수 있다면 이름이 길어져도 괜찮다는 것을 배웠습니다.
주석은 그래도 의도를 드러내기 힘든 경우에 답시다.
요구 사항을 다 구현다고, 그렇게만 구현하는 것은 정답은 아니다. 발생할 예외가 있다고 생각되면 추가하자
제시해주는 요구 사항을 다 구현해서 완성했다고 정답이 아니였습니다.
만약 5개의 요구사항이 있다면, 그 뒤에 숨어 있는 요구사항이나 예외는 훨씬 많다고 하시더라구요
요식업을 예를 들면, 양식자격증을 따서 거기에 있는 레시피대로 가게를 차린다고 맛집이 되진 않는 것처럼요.
장사가 잘 되고 싶다면, 본인만의 노하우와 차별화된 레시피가 있어야 하는 것처럼
2주차부터는 정해진 요구 사항은 다 지키되, 발생할 수 있는 예외나 기능적인 면에서 고려해봐야겠습니다.
기능들을 아주 작은 범위로 쪼개라 ! 하나의 메서드는 하나의 기능만을 수행해야한다.
기존에는 여러 함수를 나누면 코드가 길어지고 복잡해진다고 생각해 하나의 메서드가 여러 기능을 하도록 코드를 짜는게 좋다고 생각했었습니다.
하지만 이번 하나의 메서드는 하나의 기능만을 수행할 수 있어야하고 기능들을 아주 작은 범위로 쪼개야 한다는 것을 배웠습니다.
이것도 예를 들어 재밌게 이해해보자면, 여러 일을 한사람이 다 맡아서하면 힘들 잖아요 ?
그래서 생산의 과정을 여러 부분으로 나누고 여러 사람이 분담하여 일을 완성하는 분업이 생겨났고, 이 분업을 통해 엄청난 생산성 향상 및 효율을 기대할 수 있습니다.
메서드도 이런식으로 분업형태로 메서드는 하나의 기능만을 수행하게 된다면, 속도 향상은 모르겠지만
메서드별로 이 메서드가 무슨 기능을 하는지 알기 쉬워지고 가독성 또한 좋아진다는 것을 느끼게 되었습니다.
마치며
솔직히 1차 코딩 테스트가 있었다면 아직 자바에 대한 이해가 부족했던터라 프리코스까지도 기대하긴 힘들었을텐데
이번 5기는 1차 코딩 테스트가 없었던게 저에게 행운이 아니였나 싶습니다.
프리코스를 경험하지 못했다면 아직 1주차지만 이런 값진 공부하기 힘들었을것 같은데 앞으로도 더 배울수 있는 점이 많다는게 기대가 되네요 😊
아직 많이 부족하지만 프리코스 열심히해서 합격할 수 있도록 최선을 다해야지 그럼 오늘도 화이팅 👊🏻
'◼ JAVA' 카테고리의 다른 글
[Java/자바] Stream 변환 표 (0) | 2022.11.05 |
---|---|
[Java/자바] Stream(스트림)이란? 사용법 총정리 (0) | 2022.11.05 |
[Java/자바] 제네릭스(Generics)란 ? (0) | 2022.11.01 |
[Java/자바] HashSet과 HashMap의 차이점 (0) | 2022.11.01 |
[Java/자바] HashMap 클래스 사용법 (0) | 2022.11.01 |