끝을 보는 용기

Spring 사전캠프 Day 028 - 자바(Java) 공부: 배열 (4/4), 책 『비전공이지만 개발자로 먹고삽니다』 읽기 100%

writingforever162 2024. 11. 3. 17:48

"자바를 무서워하지 말고 잡으세요."


"그러고 싶은데 머리채를 잡혔어요."

이렇게 대답한 날이 엊그제 같은데 벌써 본캠프 하루 전이다. 금요일엔 강의를 듣는 중간에 문득문득 여러 감정이 퐁퐁 솟아올랐는데, 일요일에도 강의를 들으며 머리를 싸맨 탓인지 큰 감흥이 없다. 그래도 한 달 동안 사전캠프에 꼬박꼬박 출석하면서 한 가지를 새롭게 깨달았다.

 

자바 공부는 생각보다 재미있었다.

 

생각보다 괜찮다고 얘기하니 친구가 '정말 최악의 시나리오를 가정했나 보네'라고 대답했다. 나도 내 자신이 웃겨서 빵 터졌다.

물론 사용자 입력과 2차원 배열이 합쳐진 순간, 웃음기가 사라졌지만. 남은 강의를 90분 동안 속으로 끙끙 앓는 소리를 내며 듣긴 했는데, 배운 내용을 다른 사람에게 설명할 엄두가 나지 않아서 '이해 단계'에 도달하지 못했다고 판단했다. '이걸 왜 오늘 듣는다고 TIL에 적었을까?'부터 '일요일에 앉아서 강의를 듣다니, 대단하다.'까지 온갖 생각이 휘몰아쳤지만, 어쨌든 세상 밖으로 꺼낸 말에 책임을 졌다.

 

[습관 관련]

이 정도면 거의 무조건 반사 급으로 핸드폰 화면을 찍었다. 이번에는 배열 학습을 이번 주에 꼭 끝내고 싶어서 주말에도 강의를 들었지만, 앞으로는 주말은 최대한 복습과 독서로 가볍게 아침을 보낸 다음 놀기로 했다. 다른 분야 책을 읽는다든지 장편 게임 영상을 정주행한다든지. 놀고 싶은 마음을 누르고 공부부터 해치웠다는 데서 오는 보람이 크긴 하지만, 동시에 '인생이 왜 이렇게 고달플까?'라는 둥 별의별 잡생각의 늪에 빠지기 때문이다. 오늘 아침에 일어나며 확실했다.

 

'아무리 일찍 잠들어도 아침 7시 전에는 절대 못 일어난다.'

 

생체 시계가 너무 굳건해서 나도 억지로 6시에 눈 뜨려고 아등바등하지 않기로 했다. 그 대신, 생기 있는 상태로 본캠프 일정을 소화하고 싶은 만큼 적어도 11시 30분에는 눕기로 했다. 억지로 수면 시간을 줄여가면서 공부하려고 하지 말고, 주어진 시간을 최대한 활용하자고 다짐했다.

 

[인용 및 참고 출처]

1. 강의: 클래스101 온라인클래스, "[100제 풀이] 예제로 마스터하는 Java(자바) 종합 클래스", 강의 소개, (2024.11.03)

2. 단행본: "PART 5 좌충우돌! 개발자의 성장이란?", 반병현, 이효석, 『비전공이지만 개발자로 먹고삽니다』, 생능북스, 2022, 298쪽~325쪽, (2024.11.03)

 

[학습 관련]

1. 2차원 배열

public class ArrayPrac4 {
    public static void main(String[] args) {
       String[][] nations = {
             {"싱가포르","말레이시아","인도네시아","베트남","태국"},
             {"그리스","독일","이탈리아","스위스","폴란드"},
             {"우간다","에티오피아","탄자니아","케냐","모로코"}
       };
       // 3x5로 행이 3줄, 열이 5칸인 2차원 배열
       // '표'처럼 한눈에 들어올 수 있게 위와 같이 작성하는 편이 좋다.

       System.out.println(nations[0]);
       // [출력] [Ljava.lang.String;@34a245ab
       // [설명 a] nations 배열의 첫 번째 1차원 배열의 참조 값이 출력된다.
       // [설명 b] 참조 값은 주소 값, 즉 보물 상자의 위치이다.

       System.out.println(nations[0][1]);
       // [출력] 말레이시아
       // [설명] nations 배열 속 첫 번째 배열의 2번째 요소 값이 출력된다.

       System.out.println(nations[2][4]);
       // [출력] 모로코
       // [설명] nations 배열 속 세 번째 배열의 5번째 요소 값이 출력된다.

       System.out.println(nations.length);
       // [출력] 3
       // [설명] nations 배열은 1차원 배열이 총 3개이므로 3이 출력된다.

       System.out.println(nations[0].length);
       // [출력] 5
       // [설명 a] nations 배열 속 첫 번째 배열의 크기가 계산된다.
       // [설명 b] 첫 번째 배열의 요소가 5개이므로 5가 출력된다.

       System.out.println(nations[0].length + nations[1].length + nations[2].length);
       // [출력] 15
       // [설명 a] nations 배열 속 1차원 배열의 크기가 각각 5이다.
       // [설명 b] 5 + 5 + 5 == 15

       System.out.println(nations[1][nations[1].length-1]);
       // [출력] 폴란드
       // [설명 a] nations[1] == nations 배열 속 두 번째 배열
       // [설명 b] nations[1].length == 5
       // [설명 c] nations[1].length-1 == 4
    }
}

 

2. for문으로 2차원 배열 값 출력하기

public class ArrayPrac4 {
    public static void main(String[] args) {
       String[][] nations = {
             {"싱가포르","말레이시아","인도네시아","베트남","태국"},
             {"그리스","독일","이탈리아","스위스","폴란드"},
             {"우간다","에티오피아","탄자니아","케냐","모로코"}
       };
       for (int i=0; i < nations.length; i++){
          for (int g=0; g < nations[i].length; g++) {
             System.out.print(nations[i][g]+" ");
             // i는 nations 배열 속 1차원 배열의 인덱스이다.
             // g는 1차원 배열의 요소 5개의 인덱스이다.
          }
          System.out.println();
          // 첫 번째 for문 안에 있어서 i가 1씩 늘 때마다 띄어쓰기가 된다.
       }
       // [출력문 ▼] 아래와 같이 출력된다. 
       // 싱가포르 말레이시아 인도네시아 베트남 태국 
       // 그리스 독일 이탈리아 스위스 폴란드 
       // 우간다 에티오피아 탄자니아 케냐 모로코
    }
}

 

3. 『비전공이지만 개발자로 먹고삽니다』 310쪽: 잘 만들어진 오픈 소스 프레임워크는 생태계를 만든다.

▶ 대기업이 왜 그렇게 큰돈을 들여가며 오픈 소스 프레임워크를 개발하고 발표하는지 단번에 이해할 수 있었다. 성능이 뛰어나고 사용하기 쉬운 오픈 소스 프레임워크를 발표하면 개발자들은 자연스레 해당 프레임워크를 사용할 테고, 기업은 추후 어느 개발자를 뽑든 대부분 자신이 만든 프레임워크를 썼을 테니 교육에 필요한 시간과 자원을 아끼는 셈이 되었다. 이 부분을 읽었을 때 우선은 '경영 관점으로 보는 연습이 필요하겠구나.'라고 느꼈다. 그다음으로는 트렌드를 부지런히 따라가서 지원할 수 있는 시장 크기를 키우자고 마음먹었다. 공부를 열심히 해야 하는 이유가 한 가지 더 늘었다.

 

4. 『비전공이지만 개발자로 먹고삽니다』 314쪽: 여러분도 개발자 커뮤니티에서 많은 도움을 받고 정보를 얻었을 것입니다. 그러니 이제는 나도 개발자 사회에 기여한다는 마음으로, 블로그에 개발 관련 노하우나 정보를 차곡차곡 정리해 보는 것을 추천합니다.

▶ '다른 사람도 읽는 블로그다'라는 생각에 매몰되지 않으려 애써 모른 척했지만, TIL을 쓸 때면 단어 하나, 표현 하나에 신중해지곤 했다.

2024년 10월 7일 월요일에 처음 글을 올린 뒤로 블로그에 사람들이 방문하는데 어떻게 글을 대충 쓸 수 있겠는가. 마침, 4시 30분 기준 오늘 조회수가 600을 찍었다. 상황이 이렇다 보니 어느새 주석을 간결하고도 자세하게 작성하곤 했다. 특히 가뜩이나 코드도 길어서 문장이 다음 줄로 넘어가는데 주석까지 그러면 보기 불편하겠다 싶어서 PC 기준으로 각 주석은 한 줄로 썼다. 여기에 더해 나중에 내용 잊어서 큰일 났다고 난리 칠 미래의 나를 고려해서 '복습 링크'라든지 '관련 내용'을 덧붙이기도 했다.

특히 자바 용어가 사실상 거의 다 영어인 만큼, 하나라도 한글로 표현하려고 데이터 타입을 '자료형(==데이터 타입)'이라고 적는 등 나름대로 뚜렷한 주관을 열심히 티 내는 중이다. 나중에는 책에서 건네준 조언대로 '노하우'와 '정보'를 많이 공유하는 개발자가 되면 좋겠다.


5. 『비전공이지만 개발자로 먹고삽니다』 318쪽: 굉장히 차가운 말이지만 개발자의 일은 언제나 증명의 연속입니다.

▶ 직장인 신분으로 몇 년 지내면서 느낀 점이라 저 한마디가 마음속에 고드름이 맺힐 정도로 차갑게 느껴지진 않았다. '나는 이런 능력이 뛰어나요.'란 말도 결국 주장이니까. 주장은 근거를 데리고 다녀야 주장으로써 힘을 낼 수 있다. 앞으로 본캠프에서 프로젝트도 하고 공부도 하면서 버거운 순간이 종종 찾아올 텐데, 혹시 그럴 때마다 '나중에 정리해서 기록해야지'라는 마음이 들거든 이 문장을 다시 읽기로 했다. '언제나 증명해야 한다'는 충고는 개발 공부에 영어 공부를 곁들어야겠다고 느낀 이유이기도 했다.


6. 『비전공이지만 개발자로 먹고삽니다』 322쪽: 저는 성취감에 중독된 사람이다 보니, 입으로는 불평하면서도 앞으로도 열심히 새로운 기술을 만들어내는 삶을 살아가려 합니다.

▶ '아, 이래서 개발자가 되기로 결심했나 보다, 내가.' 지난날을 곰곰이 되짚어 보면 사전캠프 전날에 친구를 만나 '매일매일 최소 12시간 공부라는데 왜 신청했을까?'라고 토로하면서도 무르지 않았다. 아니, 아무도 강요하지 않았는데 자진해서 내일배움캠프에 합류했다. 지금까지 해 온 회사 생활을 거슬러 올라가면, 참 1등과 만점을 좋아했다. 일정 점수만 넘으면 통과하는 시험에서도 1등 찍고 싶다고 이를 악물었고, 목표를 달성하면 그렇게 좋아했다. TIL을 쓰는 지금도 투덜대는 중이다. '왜 일을 벌일까, 나는?' 이러면서. 누가 개발자로 취업하기에 도전한 계기를 묻거든 이 말로 설명을 대신해야겠다. 

 

7. 실습 결과

사용자 입력은 머리로는 감을 잡았는데 글로 풀어내지 못해서, 즉 출력이 안 돼서 여러 번 2차원 배열을 만들어 본 다음 정리하기로 했다. ArrayPrac4 대신 ArrayPracExtra라는 클래스로.

 

[기타 사항]

어제 프로그래머스 기초 문제5개 풀었는데 깃허브에 연동이 되지 않았다. 문제를 못 푼 이유가 바로 사용자 입력인 'Scanner' 때문이라 '너도 정복한다, 드디어!'라면서 좋아했는데, 역시 호락호락하지 않았다. charAt() 메서드랑 더불어 며칠 간격을 실습해야겠다. 시간을 두고 봐야 구멍 뚫린 부분이 훨씬 눈에 잘 들어오니까.

 

『비전공이지만 개발자로 먹고삽니다』 책을 끝까지 다 읽었다. 다음으로 읽을 책은 『비전공자를 위한 이해할 수 있는 IT 지식』과 『생강빵과 진저브레드』이다.