Weekly I Learned/2022's(7. ~ 12.) WIL

2022년 9월 4주차(9/26 ~ 9/30) Weekly I Learned "지난 3개월 되돌아보기"

ikjo 2022. 10. 3. 21:44

지난 한 주 되돌아보기

벌써 9월도 모두 지나갔다. 마스터즈 코스를 수료한지도 이제 어느덧 3개월이 지나가는 시점에 왔다. 지난 3개월을 되돌아 보았을 때 내가 우선적으로 학습했었던 순위는 '알고리즘 → 자바 → CS(운영체제, 네트워크 등)'이었던 것 같다. 당장 하반기 공채를 대비하여 학습했다기 보다는 기초를 튼튼히 하고싶다는 마음으로 학습했었던 것 같다. (사실 개인적으로는 취업과 별개로 알고리즘을 학습하거나 문제 푸는 것이 재밌다... 👀)

 

아무쪼록 2022년도 이제 3개월밖에 남지 않았는데, 나는 개인적으로 목표지향적으로 움직이는 편이라, 2021년을 마무리하는 회고 글을 작성할 당시 2022년에 달성하고자 다짐했던 계획을 완수하는데 초점을 두어 앞으로 남은 3개월(10 ~ 12월)간 학습하고자 한다.

 

 

개발자가 되기로 결심했던 2021년에 대한 회고(feat. 장문 주의)

저는 공기업에서 신재생에너지 관련 업무를 했었고(2018. 1.~2021. 1.) 2021년 3월 9일 개발자가 되기로 했었습니다. 아직 부족한 점이 많지만, 이 글은 지난 2021년 저의 성장 과정을 기록한 글이기도

ikjo.tistory.com

 

2022년의 학습 목표 달성 현황

1. 마스터즈 코스(6개월)를 무사히 수료하는 것 : 완료

2. 기술 블로그를 보다 활성화 하는 것 : 완료 → 꾸준히 포스팅할 예정

3. 프로그래머스 레벨 3까지 알고리즘 문제 다 풀기 : 진행 중(현재 레벨 3 문제 풀이 중)

4. 자바의 정석 정독 : 진행 중(람다와 스트림, 입출력, 네트워킹 학습 중, 자바 스터디 15주차 中 11주차 완료)

5. 인프런 김영한님 스프링 및 JPA 강의 완강 : 진행 예정

6. 나만의 웹 서비스(프로젝트) : 진행 예정

 

알고리즘 역량을 한 단계 도약할 수 있었다!

지난 3개월을 되돌아보았을 때 가장 많은 시간을 투자하고 가장 많은 성장을 이루었던 것은 '알고리즘'이었던 것 같다. 특히, 이전에 마스터즈 코스 중에 틈틈이 알고리즘 문제를 학습해왔던 것이 기초가 되어 최근 3개월간 알고리즘을 학습하는데 많은 도움이 되었다.

 

올해 1월 ~ 6월 기준으로 나는 백준 실버 난이도의 문제들과 프로그래머스 레벨 2 문제들을 푸는 수준이었지만, 지금은 골드(5~3) 난이도의 문제들과 프로그래머스 레벨 3 문제들을 풀고 있는 중에 있다.

 

프로그래머스 문제 풀이 현황(왼쪽 : 2022년 1월 기준, 오른쪽 : 2022년 9월 기준)

※ 백준의 경우 수료 직후엔 AC Rating이 실버 1(순위는 약 23000위)이었으나, 현재는 골드 2(순위는 약 9000위).

 

개인적으로는 문제 자체의 난이도 보다 '문제의 유형'에 따라 체감되는 난이도가 천차만별인듯한 느낌이다. 앞서 현재 백준 골드 문제를 푼다고 언급했었으나, 조합론, 정수론, 기하, 동적 계획법 같은 다소 수학적(?) 사고가 필요한 유형에 대해선 백준 실버 난이도 문제를 스스로 못 푸는 경우가 허다했다.

 

또한, 단순히 문제를 많이 풀었다고 해서 실력이 향상되었다곤 할 수 없기에, (더욱이 시간을 제한하지 않았을뿐만 아니라 스스로 못 푼 문제도 있기에) 취업을 위한 경험 차원에서 그리고 현재 나의 실력 점검 차원에서 (내가 알고리즘을 제대로 이해하고 있는 것이 맞는지, 내가 알고있는 알고리즘을 특정 문제 상황에서 적용시킬 수 있는지 등) 실제 코딩테스트 시험을 응시해볼 필요성을 많이 느꼈다. 

 

결과적으로 최근 자비스앤빌런즈 코딩테스트에선 4문제 중 4문제 Solve, LG U+ 코딩테스트에선 4문제 중 3문제 Solve, 프로그래머스 하반기 데브매칭에선 4문제 중 3.73문제 Solve 해낼 수 있었다. 하지만 카카오 신입 블라인드 공채 코딩테스트는 7문제 중 2문제 Solve라는 아쉬운 성적을 보였는데, 카카오 코딩테스트 문제를 온전히 풀어내기 위해선 앞으로 더 많은 노력이 필요할 것으로 보인다. 🤣

 

아무쪼록 아직 부족한 점은 정말 많지만, 이번 코딩테스트를 통해 '이전보다는' 알고리즘 역량이 확연히 향상되었다는 것을 체감할 수 있었다. 하지만 웹(백엔드) 개발자를 준비하고있는 상황에서 알고리즘 학습을 중점적으로 할 수는 없기에 앞으로는 스프링, 데이터베이스 등에 대한 학습과 함께 프로젝트를 중점적으로 진행하면서 알고리즘 학습을 병행하고자 한다. 아울러, 코딩테스트 이후에 존재하는 또 다른 장벽인 '면접'을 대비한 학습도 필요해 보인다. 😂

 

운영체제의 '물리 메모리'와 '가상 메모리' 이론 학습 시작!

2주 전 교착 상태와 교착 상태를 해결하는 운영체제에 대한 이론을 학습했던 것에 이어서, 이번에는 물리 메모리와 가상 메모리에 대한 이론을 학습하기 시작했다. 이전 마스터즈 코스 CS10 과정 중 프로세스 메모리 관리 모델을 구현해야하는 과제가 있었다. 개인적으로 구현의 난이도를 떠나서 도대체 무엇을 구현해야하는지를 몰랐었는데, 이번에 관련 이론들을 학습해보니 그 당시 때 충분히 그럴만했다는 생각이 들었다. 💦

 

이번에 운영체제의 메모리 관리 시스템을 학습하면서 이러한 사전 이론을 배운 상태에서 해당 미션을 접했다면 좀 더 수월하게 접근할 수 있지 않았을까하는 아쉬움이 들었다. 아무쪼록 이번 내용은 지금까지 학습했었던 운영체제 이론 중 가장 복잡하고 난이도가 있어 보여 학습하는데 다소 오랜 시간이 걸릴 것으로 보인다. 물론, 책 한권 쭉 읽었다고 내가 이에 대해 제대로 이해했다고 할 수 없기에, (솔직히 너무 어렵다 😇) 일단은 고기를 완전히 익히기 전 '초벌'한다는 느낌으로 학습해나가고자 한다.

 

자바의 Enum에 대해 알아보았다!

이번에는 자바 스터디 11주차 과제의 일환으로 자바의 Enum에 대해 알아보았다. 단순히 Enum에 대한 사전적인 정의를 나열하기 보다는 내가 사용하면서 느꼈던 Enum의 가치(?)에 대해 작성하려고 노력했고, 그 과정에서 자바 튜토리얼 문서 등을 참고하여 부족한 지식을 메우고자 했다. 

 

 

Java의 Enum에 대해 알아보자!

Enum이란? Enum은 '열거'라는 뜻을 가지는 enumeration의 약어인데, 자바에서는 JDK1.5부터 Enum Type(이하 '열거형')이라는 특수한 자료형(data type)을 제공한다. 열거형은 특정 변수가 사전에 정의된 상수

ikjo.tistory.com

 

특히, 이번에 학습하면서 EnumSet이라는 자료구조에 대해 처음알게 되었는데, 그 과정에서 fail-safe 방식의 iterator와 fail-fast 방식의 iterator, ConcurrentModificationException 예외 등 여러 키워드에 대해 알아 갈 수 있었던 것도 큰 수확이었다.

 

앞서 마스터즈 코스를 수료한 이후로 지난 3개월간 가장 성장할 수 있었던 부분은 알고리즘 역량이었다고 했었는데, 그 다음으로 성장할 수 있었던 건 단연 자바 프로그래밍 역량이라고 할 수 있을 것 같다. 매 주차별로 주어지는 핵심 키워드들에 대해 나만의 방식대로 정리하다보니 그 과정에서 알아가는 것들이 많았고, (특히, 내가 안다고 착각하고있었던 것을 깨달을 수 있었음) 기록으로 남긴 덕에 중간중간 찾아보고 복습할 수도 있었다. (마스터즈 코스에서 다소 무지성(?)으로 다루었던 키워드들에 좀 더 제대로 이해할 수 있게 되었다!)

 

올해 초 우연히 알고리즘 스터디에 합류하게 되어 많은 성장을 할 수 있었듯이, 수료 후에는 우연히 자바 스터디에 합류하게되어 많은 성장을 할 수 있었던 것 같다.