끝을 보는 용기

Spring 본캠프 Day 044 - 과자 봉지 대신 2단계 계산기 부스럭거리는 중

writingforever162 2024. 11. 19. 23:47

얼마나 정신이 없었으면 어제 오류 정정 안내 문자를 받았단 사실까지 망각했다. 2주 차 강의 9강 이후로는 필기 없이 쭉 듣기만 해서 오류 정정 요청을 못 했는데. 지금 보니 그전까진 강의 자료와 코드 스니펫(Code Snippet)을 얼마나 꼼꼼히 읽고 따라 쓴 걸까, 여러 감정이 뒤섞여 요동친다.

 

어제 온종일 우울의 늪에 빠져 허우적댄 탓인지 덕분인지, 오늘은 2단계 계산기를 만드는 내내 오류가 발생해도, 노란 줄로 경고가 보여도 담담했다. 진짜 냅다 들이박는 식으로 어려운 걸 겪었더니 이 정도로는 심장이 코웃음조차 치지 않았다. 

 

'음, 막혔네. 왜 막히지? 아, 이 개념이 헷갈려서 그렇구나. 튜터님께 가서 해결할 방법을 찾아보자.'

 

'으음, 의도와 다르게 구현되네? 이렇게 해결하면 좋겠는데, 더 좋은 방법이 있을까. 튜터님께 물어봐야지.'

 

저녁 먹고 한 7시쯤엔 이런 생각도 했다. 이렇게 왔다 갔다 할 바엔 그냥 튜터님들이 계신 방 근처에서 혼자 부스럭거리다가 문제 생기면 바로 들어가는 게 더 빠르지 않을까.

 

키보드를 두들길 때 나는 소리는 아니지만, '사부작사부작'과 '부스럭부스럭' 소리가 듣기 참 좋다. 미간에 내 천(川) 자를 그릴 정도로 골똘하며 생각에 잠긴 나 자신을 부드럽고 몽글몽글하게 표현하는 단어 같아서.

 

내일도 열심히 부스럭대고 사부작거리련다.

 

[습관 관련]

어제 1시 넘어서 잔 탓에 8시에 일어났다. 어제 못한 운동은 점심과 저녁에 10분씩 했다. 거북목 스트레칭과 허리 근력 강화 운동은 너무 피곤해서 내일부터 무조건 시간 내서 하자고 다짐했다. 하루 이틀 더 안 했다가는 허리에서 뽀각 소리가 들릴 듯하다. 오늘도 어김없이 여러 튜터님들께 질문하러 다니느라 책 읽기는 실천하지 못했다. 그래도 어제 잃은 여유를 조금은 되찾았다.

자바(Java) 문제는 오늘도 한 개를 풀었는데, 11월 16일 토요일에 잔디가 자라지 않았다! 여태까지 파릇파릇하게 자란 잔디밭보다 텅 빈 저 한 칸이 그렇게 신경 쓰일 수가 없었다. 12월에는 꼭 새싹빛이며 여름 나뭇잎빛만 보이도록 할 거다. 색깔을 말할 때 초록색이나 연두색 같은 한자보다는 사물에 빗대서 표현하기를 좋아해서 저렇게 작성했다. 어휘력 공부도 어떻게든 챙겨야겠다.

 

[학습 관련]

1. void와 반환타입의 차이

// [A] 클래스 BungOBbangPan에서 보이는 차이
package com.exercise.basic.apple;

public class BungOBbangPan {
    public String pasteInside;
    public String dough;
    public int price;
    public String name;

    public BungOBbangPan(String pasteInside, String dough) {
        this.pasteInside = pasteInside;
        this.dough = dough;
        this.name = pasteInside + " 앙금과 " + dough + " 반죽으로 만든 붕어빵";
        System.out.println(name);
    }

    // [1] 메서드가 실행되고 int 타입으로 값을 돌려준다.
    public int changePrice(int price) {
        this.price = price;
        return price;
    }

    // [2] 메서드가 실행되지만 돌려주는 값은 없다.
    //     즉, price를 this.price에 저장하고 출력이란 행위만 한다.
    public void printPrice(int price) {
        this.price = price;
        System.out.println("3개에 "+price+"원 입니다.");
    }
}
// [B] Main에서 보이는 차이
package com.exercise.basic.apple;

public class BungOBbangStore {
    public static void main(String[] args) {
        BungOBbangPan one = new BungOBbangPan("슈크림", "밀가루");

        // [1] 반환하는 값이 있을 때
        // public int changePrice(int price) {
        //    this.price = price;
        //    return price;
        // }
        System.out.println("3개에 "+one.changePrice(2000)+"원 입니다.");

        // [2] 반환하는 값이 없을 때
        // public void printPrice(int price) {
        //    this.price = price;
        //    System.out.println("3개에 "+price+"원 입니다.");
        // }
        one.printPrice(2000);
    }
}

팀원분이 둘의 차이를 물어보셔서 대답하다가 순간 나도 헷갈려서 바로 튜터님께 달려갔다. 결국 둘의 차이는 어디서 출력하고 싶은지의 차이일 뿐이었다. 역시 확신이 서지 않을 때는 적극 물어보고 직접 적어보기가 지름길은 아닐지언정 올바른 길이었다.

 

2. 방 탈출 특강 - 클래스(class)를 정복하지 못 하면 못 나간다!

(1) 스프링(Spring)과 자바(Java)는 조금 다르다. 

- 자바를 잘하는 사람이 스프링을 잘하나요? 아니요.

- 스프링을 잘하는 사람이 자바를 잘하나요? 아니요.

(2) 스프링에서 사용하는 문법이 클래스라서 클래스는 반드시 알아야 한다. 특히 생성자가 중요하다!

(3) 반드시 자신만의 언어로 설명할 수 있어야 하는 개념: 멤버변수 / 생성자 / 매개변수(파라미터) / 인스턴스

(4) 객체 지향이란?: 클래스 여러 개가 서로 유기적으로 상호작용하면서 원하는 목적을 이루어가는 것

(5) 클래스란?: 성질을 정의한 것으로 그 성질은 바로 생성자에 넣는다!

(6) 접근 제어자 중 public은 클래스와 패키지에 모두 접근할 수 있고 private은 클래스 내에서만 접근할 수 있다.

(7) this를 붙이는 이유: 멤버변수랑 매개변수 이름이 똑같아서!

 

[기타 사항]

오늘 공부하면서 마음속으로 질문을 몇 번 던졌다.

 

'어제는 왜 그렇게 힘들었을까?'

 

여러 팀원분과 튜터님과 매니저님의 조언을 되새긴 끝에 나름 답을 구할 수 있었다.

 

'처음부터 모든 걸 완벽하게 하고 싶어서였다.'

 

깃허브의 리드미(ReadMe)도 처음부터 완벽하게 쓰고 싶고 계산기 2단계도 완벽하게 만들고 싶고 트러블슈팅(Trouble shooting)과 TIL 작성도 완벽하게 하고 싶다는 욕심 때문에 그토록 허덕였다.

 

'개발에는 정답이 없다.'

 

이 한마디를 그렇게 많이 되뇌었으면서 정답 없는 숙제에 완벽이란 기준을 들이대다니.

 

어제까지만 해도 과제를 다 한 뒤에 트러블슈팅을 복습 겸 몰아서 하려고 했는데, 방향을 바꾸길 정말 잘했다. 코드를 쓰다가 문제가 생기면 그 자리에서 문제를 해결하고 곧장 트러블슈팅으로 기록하니 분량이 밀리지도 않고, 여태 양어깨를 짓누른 부담감이며 압박감이 모두 가벼워졌다. '이것도 트러블슈팅인가?' 고민할 시간에 일단 기록하기로 했다. 이 시기에 시행착오는 정말이지 없으면 오히려 이상할 만큼 당연하고 판단 기준 또한 꾸준히 연습해야 단단하게 자리 잡을 테니까.