220705 당연하다고 생각했던 것이 당연한 게 아닐 때

샨티(shanti)·2022년 7월 5일
0

TIL

목록 보기
31/145

하루를 마무리 하기 전, 오늘 있었던 일들을 잔잔히 되짚어봅니다.
성공과 실패의 모든 요소에서 '배울 점'을 찾아내어 기록하고,
더 성장하는 내일의 나를 위해 'action plan'을 세웁니다.


오늘의 TIL은 '배운 것'이라고 쓰고 '반성문'이라고 읽는다.

지난 8주차 레벨테스트 때도 그렇고, 이번주 퀘스트 과제인 'Todo List' 과제도 그렇고...
난제 중 하나가 바로 레이아웃(Layout) 문제였다.

물론 다른 부분들은 수월하게 잘 풀린다는 얘기는 아니지만,
레이아웃 문제는 정말 안갯속을 헤집고 다니는 느낌이었다.

분명 이 프로세스에, 이 포인트에 코드를 넣었으면 화면에 나타나야 할 것 같은 컨트롤들이
기가막히게 나오지 않았다.
대체 어디간거임?

지난주에도 막판까지 레이아웃을 잘 조정해보려고
각 컨테이너, 특히 'JPanel' 컴포넌트에 모두 백그라운드 컬러를 설정해놓고 하나 하나 뜯어봤는데도 이해를 할 수 없어서 결국 포기했던 기억이 난다.

Todo list를 만드는 게 내 능력 밖이라는걸 너무나도 잘 알기에 (ㅋㅋ) 주말에 과제페이지가 뜨자마자 마음이 조급해서 코드를 쳐내려갔고,
로지 트레이너님을 붙잡고 조언까지 받았지만 시원하게 해결되지 않은 느낌이라 오늘도 열심히 일과 과제를 끝낸 후 Todo list 과제를 붙잡았다.

한 2시간 고민했을까...
공식 문서도, 블로그도 모두 뒤졌지만 확실한 답이 없어보여 결국 우리기수의 명예소방관(ㅋㅋ) 동료를 찾아서 쿡쿡 찔렀다.

명예소방관님....ㅋㅋㅋㅋㅋ
제 발등에 떨어진 불 좀 꺼 주세요...ㅋㅋㅋㅋㅋㅋ

먼저 동료에게 Todo List 구현을 어떻게 할 예정인지 물었다.
다행히 동료 역시 나와 비슷한 생각을 가지고 구현할 예정이라 했기에 바로 화면공유를 실행하여 당신의 생각대로 화면이 구현되지 않는다는 사실을 직접 시연해주었다.

동료도 적잖이 당황하는 것처럼 보였다.
분명 이렇게 하면 컨트롤이 나타나얄 것 같은데... 왜 안나타나지?

나는 이제까지 내가 해 본 모든 실험과 경우의 수를 동료에게 보여주었다.

플랜 A가 안되어서 B를 해보았고, B'도 안되니 C도 해봤지만 안되고...
사실 어제 오늘만 고민한 것이 아니라, 지난주 레벨테스트를 하면서도 고민했던 부분이라 생각보다 많은 경우의 수를 실험해 본 사실을 보고는 나 스스로도 놀랐다.
오호... 내가 이렇게도 했었구나....ㅎㅎ 저런 시도도 해봤었구나...ㅎㅎ

한편으론 동료가 나와 같은 방법으로 진행했을 때 발생하는 오류, 그리고 결과없이 소진할 시간을 줄여줄 수 있었다는 점이 뿌듯하게 느껴지기도 했다.
분명 나와 같은 생각을 가지고 구현하기 시작했다면 그 결말은.... 지금의 내 모습과 다를바 없을 것이기 때문이다.

쨌든, 그렇게 한 30분을 함께 고민했을까?
갑자기 동료와 나는 레이아웃과 각 컴포넌트들의 '성질'에 집중하기 시작했다.
어쩌다가 그런건지는 모르겠는데, 정말 물 흐르듯이 그 방향으로 이야기가 흘렀다.

Swing으로 만들려는 Todo List에서 빼놓을 수 없는 존재들, 특히 최상위 구현체인 JFrame과 가장 골머리를 썩고 있는 JPanel. 이 둘의 속성에 주목한 것이다.

갠적으로 JFrame에 대해서는 어느정도 알고있다고 생각했다.
오라클 공식 문서도 많이 찾아봤고, 블로그 글을 보며 알음 알음 알게된 지식을 JFrame 구현할 때 곱씹어보았기 때문에 한가지 확실하게 알고있었던 점은 'JFrame'의 기본 레이아웃이 'BorderLayout'이라는 점이었다.

거기까진 좋았다...
그런데....

막상 까놓고 보니 JPanel에 대한 오해가 어마어마 했던 것 아닌가....
세상에.....

결론적으로 JPanel의 기본 레이아웃은 BorderLayout이 아니라 FlowLayout이었다.
JFrame의 레이아웃이 BorderLayout이다보니 당연하게 JPanel도 그러할 것이라 생각했던 건데...
갑자기 뒤통수를 빡- 맞은 기분이었다. 어... 이게 뭐지...?

여러 컴포넌트들을 포괄하여 컨테이닝 할 수 있는 'JPanel'을 선언해놓고는 그 레이아웃을 정확히 모른 채 사용하다보니, 내가 설정하는 값 역시 전혀 유효하지 않은 값들이었고 그것들이 꼬이면서 결국 정상적이지 않은 출력이 나타나게 된 것이다.

동료와 나는 이 사실을 깨닫고는 바로 각각의 패널에 백그라운드 컬러를 입히고, 패널들을 재조정하기 시작했다.

그리고 마침내!!!!!!!
내가 그렇-게도 골머리를 썩고 너무 힘들어서 줄줄 눈물을 흘리던 레이아웃이 마법처럼 해결되었다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
심지어 JLabel에 넣은 테스트 문구도 "제발 나와라"
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ하 진짜.....

정말 진심이었다. 8주차에는 명예소방관 동료와 함께 프로그램 Run 하기 전에 '하나님 아버지 제발요~' 이러면서 Run 버튼을 눌러재꼈다. 정말이다. ㅋㅋㅋㅋㅋㅋ

이게 뭐라고 이렇게나 힘들었을까....
결론적으로 해결되었으니 정말, 너무나 다행이라고 생각한다.
동료의 시간을 너무 뺏은 것 아닌가? 라고 생각했지만
그래도 함께 문제를 해결할 수 있어서 정말 다행이었고, 어쨌든 다른 동료들의 시행착오를 줄이게 되었다는 사실이 꽤 기뻤다.

깨달은 부분에 대해서는 동료들이 있는 디스코드 채팅방에도 정리해서 공유했다.

이 원리를 깨닫고 나니 강의에서 아샬님이 레이아웃을 잡는 방식이 새롭게 다가왔다.
정말 속이 다 시원하다.

어제도 오늘도, 물고 늘어지는 시간에 대한 밸런스에 대해 고민했는데...
이 물고 늘어지는 시간을 통하여 '깨닫는 순간'을 맞이할 때 느끼는 쾌감과 '진정한 앎'이 주는 혜택이 꽤 큰 것 같다.

또한 나 스스로도 인지하지 못했던 '누적된 실험 시간' 역시 이렇게 좋은 결과를 이끌어 낼 수 있었던 원인인 것 같다.
다양한 경우의 수를 고려하여 실험을 해 본 덕택에 동료와 함께 이야기를 나누며 오류를 범하는 시간을 많이 줄였던 것 같다.

벌써 화요일이 다 끝나간다.
갠적인 목표는 수요일 일과시간 내에 퀘스트 과제를 끝내고 주 후반에 다시한번 퀘스트 과제를 풀어보는 것이다.

가능할지는 모르겠지만, 자꾸 자꾸 체감난이도를 낮춰야 나 역시 포기하지 않고 이 과정을 잘 끝마칠 수 있을 것 같기에...
체감 난이도를 계속 낮출 수 있도록 더 수련하고 공부해야겠다.

열심히 하는 것 보다 한발짝 더 나아가야 격차가 생긴다.
언제나 잊지 말고... 뚜벅 뚜벅 걸어나가자.

profile
가벼운 사진, 그렇지 못한 글

0개의 댓글