본문 바로가기
꾸준히

[TIL-183] JVM, GC, 스택, 시뮬레이션

by 무자비한 낭만주먹 2024. 1. 7.

[그림1]. 오늘도 감사한 공부 시작 ~

 

목차
0. 오늘의 학습 시간
1. 오늘 배운 것
2. 오늘의 알고리즘
3. 오늘의 CS
4. 영어 받아쓰기
5. 내일 할 일 (청사진)
6. 감사한 일

 

0. 오늘의 학습 시간
00:00 ~ 02:00: 새벽 공부
12:00 ~ 13:00: 오늘 옆 팀 과장님이 오셔서 수다떠시고 가셔서 삼십분 쉬고 열두시부터 공부했다.
22:00 ~ 24:00: 일 끝나고 숙소에 와서 짬 공부를 했다.

 

1. 오늘 배운 것
곰곰히 생각해봤다. 나는 왜 지금 회사가 불안할까, 대표님 조차 회사의 오늘 내일을 논하는 상황? 기존 선배들의 많은 이직? 개발에 대해 아무 관심 없는 주위 사람들 등 .. 내가 꿈꾸던 개발자의 삶과 많이 달라 그랬던 거 같다. 내 머릿속엔 어렴풋이 "서비스 기업으로 이직하면 괜찮아 질거야 .. 내가 꿈꾸던 그런 의미있는 일을 할 수 있을 거야 .."라는 환상이 살고있는데, 과연 서비스 기업으로 이직한다고 지금 이 고민들이 해소될까?

내가 두려운 이유는 사실 나 스스로를 믿지 못해서 그런 것 같다. 물론 한치 앞길도 모르는 주니어 개발자기에 어쩔 수 없는 부분임은 인정하지만, 온전히 문제의 원인만 찾자면 "나 스스로를 믿지 못함"이 그 이유임이 분명하다. 오늘의 노력이 정말 나를 훌륭한 개발자의 길로 이끌어줄 거라고 믿는다면, 이 일을 하면서 커리어가 꼬일 것을 걱정하는게 아니라 '어떻게 하면 성장할 수 있을지'를 고민 했을텐데 말이다. 결국 "내가 노력한다고 나도 인정받는 개발자가 될 수 있을까?"라는 의심이 진짜 두려움의 원인이라고 생각한다.

두려움은 강력한 도구라고 생각한다. 내 스스로가 아직 불완전한 주니어 개발자기에 가질 수 밖에 없는 의심 덕에 오늘 하루도 발등에 불 떨어진 거 처럼 필사적으로 살 수 있음은 분명히 감사한 일이다. 이 두려움은 해결하려 한다고 해결될 수 있는 문제가 아님을 인정하고 어떻게 이 두려움이 만들어내는 못난 생각들을 긍정적인 결과로 변화시킬지를 고민해볼 필요가 있을 거 같다.

 

2. 오늘의 알고리즘
간단한 시뮬레이션 문제와 스택 문제를 풀었다.

https://github.com/choichanhyeok/codetree-TILs/tree/main/231220

https://leetcode.com/problems/min-stack/solutions/4431050/double-stack/

 

double stack - undefined - LeetCode

View choichanhyeok's solution of undefined on LeetCode, the world's largest programming community.

leetcode.com

 

 

3. 이주의 CS
[2023-12-18]
- 자바에서 .class 파일을 만들 수 있는 건 class 만 있는 게 아니라 interface, abstract 클래스도 존재한다.
- 인터페이스의 역할은 구현된 클래스는 관심 둘필요 없이 인터페이스를 이용해 작업할 수 있도록 하는 것이다.
-  이에 대한 일반적인 예시는 DAO(Data Access Obejct)이다.
-  인터페이스와 abstrtact를 사용하면 "개발할 떄 기능 구현에만 집중 가능", "개발자 역량에 따른 메소드 이름, 매개 변수 선언의 편차 줄일 수 있음", "공통적인 인터페이스와 abstract 클래스 선언을 통해 선언과 구현 구분"등의 이점을 얻을 수 있다.
- Enum이라는 상수의 집합도 있는데, 열거형 클래스로서 어떤 클래스가 상수만으로 만들어져 있을 경우에는 반드시 class로 선언할 필요 없이 ENUM을 써주면 된다.
- 사실 예외의 종류는 checkedException, uncheckedException(Runtime Exception), error로 세 종류이다. 
- 모든 Exception과 에러의 부모 클래스는 당연히 Object 클래스이지만 또 다른 공통 부모 클래스가 있는데 바로 Throwable 이다.
- getMessage, toString, printStackTrace등의 메서드 들도 Throwable의 추상 메서드들이다.
- throws로 예외를 직접 만들어 던질수도 있는데, 이 경우 받는 클래스에서 try-catch로 잡아줘야한다.
- 근데 컨트롤러 어드바이스 같은걸 이용해 알아서 받아주도록 할 수도 있다.

[2023-12-20]
- JVM이 무엇일까? 결국 간단히 얘기하면 내가 쓴 자바 프로그램이 수행되는 프로세스(메모리에 올라간 프로그램)을 의미한다.
- JVM 내에서 메모리 관리를 해주는 가비지 컬렉터가 존재해, 자바 개발자는 따로 메모리 관리를 해주지 않아도 된다.
- 다만 그럼에도 메모리를 효율적으로 사용하는 것은 중요하다.
- GC가 수행되는 방식은 여러가지가 있다.
- Java7 부터 사용 가능한 GI라는 가비지 컬렉터를 제외한 나머지 JVM은 힙 영역에서 관리된다.
- YOUNG영역은 젊은, OLD 영역은 늙은 객체들이 자리잡고 Perm이라는 영역은 클래스나 메소드에 대한 정보가 쌓인다.
- YOUNG영역은 Eden과 두 개의 Survior 영역으로 나뉘는데, 에덴은 객체를 생성하자 마자 저장되는 장소를 의미한다.

 

4. 오늘의 무자막 시청
오늘의 영상:


 

5. 내일 할 일 (청사진)
1. 자바의 신 마저 공부하기
2. 짬 날때마다 최선을 다해 공부하기
3. flutter 앱 개발 공부

 

6. 감사한 일
오늘은 친구가 놀러와서 잠깐 친구를 봤다. 그래서 감사하다.

 

 

오늘 하루도 공부할 수 있어 크게 감사합니다

2023-12-20 개발자 최찬혁