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

2022년 9월 2주차(9/12 ~ 9/16) Weekly I Learned "추석 연휴의 여파 극복하기"

ikjo 2022. 9. 19. 16:15

지난 한 주 되돌아보기

나름대로 추석 연휴 시간 때도 학습을 이어나가겠다고 결심했었던 것과 달리 막상 추석 연휴가 되니 마음이 느슨해지면서 학습 보다는 개인적인 여가생활을 보내는 시간이 많아졌던 것 같다. 😅 그래도 나름대로는 꾸역꾸역(?) 학습할려고 노력했었던 것 같다.

 

자바의 예외 처리에 대해 알아보았다!

자바 스터디 9주차 과제로는 자바의 예외 처리에 대해 학습하는 것이었다. 사실 예외 처리에 대한 부분은 어느 정도는 안다고 생각했기에, 새로운 학습 보다는 복습에 초점을 맞춰 학습을 진행해보았다.

 

 

Java의 예외(Exception)에 대해 알아보자!

프로그램에서 발생할 수 있는 3가지 에러 예외 처리를 다루기 앞서 우선 프로그램에서 발생할 수 있는 3가지의 에러에 대해 알아보자. 첫 번째는 컴파일 에러이다. 이는 컴파일러가 소스코드를

ikjo.tistory.com

 

요즘 자바를 학습할 때는 자바 공식 문서 사이트를 참고해는데, 영어로 되있어서 그렇지 그 내용들이 자바를 이해하는데 핵심적인 내용들이 많았다. 이번에 예외 처리를 공부하면서도 finally 키워드에 대한 좀 더 깊은 내용 등을 새롭게 배울 수도 있었다. 앞으로 자바의 공식 문서 사이트를 적극적으로 활용해야할 필요성을 많이 느꼈다.

 

알고리즘, 알고리즘, 알고리즘!!

사실 알고리즘을 학습을 안했었던 주는 없었지만, 이번 한 주는 특히나 알고리즘 학습에 집중하게 되었다. 저번주와 마찬가지로 이전에 풀었지만 어려웠던(다른 사람의 풀이를 보았던) 문제들을 다시 풀어보고 나의 것으로 만드는 시간들을 가졌다. 

 

 

[백준 - 20159] 동작 그만. 밑장 빼기냐? - Java

문제 설명 20159번: 동작 그만. 밑장 빼기냐? 카드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 단, N은 짝수이다. 둘째 줄에 카드의 윗장부터 밑장까지 카드의 값 X (1 ≤ X ≤ 10,000)이 정수로 주어진다. w

ikjo.tistory.com

 

 

[백준 - 2110] 공유기 설치 - Java

문제 설명 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내

ikjo.tistory.com

 

아울러, 이전부터 시간이 된다면 백준 사이트의 '단계별로 풀어보기'에 있는 문제들을 풀어보고 싶었기에, 이번 한 주에는 해당되는 문제들을 풀기 시작했다. 일단은 나에게 익숙한 '백트래킹', '그래프와 순회', '이분 탐색', '스택' 등의 단계의 문제들을 풀어보았는데, 대체적으로 난이도는 쉬웠으나, 몇몇 문제들(골드 4이상)의 경우 상당히 골머리를 썼던 문제들도 있었다.  

 

나의 치명적인(?) 약점은 한 문제에 꽂히면(몰입하면) 그 문제에 너무 많은 시간을 쓰게 된다는 것인데, 이로 인해 이번 한 주간 알고리즘 학습에 더 집중하게 됐던 것 같다. 😅 아무튼 이것저것 풀다보니 대략 40문제 이상의 문제를 풀게 되었던 한 주였다. 🤣

 

그래도 지난 한 주간 알고리즘에 몰입했었던 덕인지, 한 주를 마무리해갈 즈음 모회사 코딩테스트에 응시했었는데 생애 처음으로 올솔(All Solved, 5문제)을 해낼 수 있었다. 🎉

 

교착 상태에 대해 알아보았다!

늘 진행 중이긴 하지만 자주 진도가 멈춰져있는 운영체제 학습을 다시 이어나갔다. 😅 이번에는 운영체제가 프로세스 간 상호 배제(임계구역 동시 접근 방지)를 보장하기 위해 잠금(lock)을 사용하다 발생하는 교착 상태(dead-lock)에 대해 학습해보았다.

 

매번 운영체제를 학습할 때마다 평상시에 익히 들어왔던 내용들을 학습하지만 정작 해당 내용들에 대해 제대로 알고있는 경우가 거의 없었던 것 같다. 즉, 운영체제를 학습할 때마다 정말 유익하다고 생각은 하지만 막상 학습하다보면 결국 뒷전으로 밀리게 되는 것 같다. 💦 

 

다음에 학습해야할 내용은 물리 메모리와 가상 메모리에 관한 것인데, 운영체제에서 다루는 내용들 중 가장 중요한 것들에 속하는 내용이기에 다음 주에는 꼭 학습을 이어나가야겠다는 생각이 들었다.

 

자바 웹 프로그래밍에 도전해보자!

코드스쿼드 마스터즈 과정을 통해 자바와 OOP를 배우고, 수료 이후에도 지속적인 알고리즘 문제 풀이와 함께 자바의 정석 학습 및 자바 스터디로 부족한 자바 기초를 다짐으로써 이전 보다 자바 프로그래밍 역량이 훨씬 성장했다는 것을 느끼고 있다.

 

예전 코드스쿼드 마스터즈 과정에서 알게 된 책 중 '자바 웹 프로그래밍 Next Step'이라는 책이 있었는데, 마치 마스터즈 코스 과정과도 유사하게 특정 프로그램을 구현하는 미션과 함께 리팩토링, 테스트, 빌드 등의 작업도 같이 따라갈 수 있는 책이었다. 개인적으로 이 책을 통해 미션들을 구현해봄으로써 내가 이전 보다 작성했던 코드들 대비 얼마나 더 나은 코드를 작성할 수 있을까라는 생각이 들어 이 책의 과정을 따라가보고 싶다는 생각이 들었다.

 

아직 책의 서론 내용들밖에 보진 못했지만, 자바 학습(자바의 정석 완독, 자바 스터디)이 마무리가 되어갈 즈음 이 책을 본격적으로 시작해봐야겠다는 생각이 들었다.

 

자바의 정석 완독이 거의 눈 앞에!

자바 스터디를 하면서 자바의 정석을 틈틈이 읽어나가고 있다. 2022년의 목표 중 하나로서 자바의 정석 완독을 진행하고 있긴한데, 사실 프로그래밍 언어의 기본서를 주욱 읽는 것은 그닥 도움이 되지 않는다고 생각한다. 그래서 개인적으로는 이미 알고있는 내용들에 대해선 좀 더 깊은 내용을 알기 위해 정독하는 편이고, 다소 낯선 내용들에 대해선 가볍게 읽는 편이다.

 

가볍게 읽는다는 것은 '이런 내용이 있구나' 정도로 이해하고 넘어간다는 것인데, 이렇게 읽고 넘어가더라도 나중에 알고리즘 풀이이나 웹 프로그래밍을 할 때 해당 API나 키워드들이 기억이 나 해당 내용들을 다시 찾아볼 수 있는 효과를 얻을 수 있었다.

 

아무쪼록 이 책을 처음 샀을 때 언제 다 읽지 했었지만, 어느덧 이제 14 ~ 16장(람다와 스트림, 입출력, 네트워킹) 단 3장만 남아 있다. 물론 해당 챕터 중간 중간 찾아서 읽은 부분도 있지만, 완독을 하는 과정에서 기존에 알고 있는 내용들을 정리하고 더 깊이 있게 학습하고, 나에게 있어 다소 낯선 내용들은 용도와 키워드들을 배워가고자 한다. 이 과정에서 자바 스터디를 하는 것이 굉장히 많이 도움이 된다.