TIL 열심히 해야되는 이유

포인트 처음 받고 신난 우리들

image.png

사고뭉치1, 2.gif

프로젝트를 시작하며

한글로 먼저 로직 정리하기

처음부터 빈 화면에 코드를 작성하는 것이 막막했다. 어디서부터 시작해야 할지 감이 잡히지 않았고, 전체적인 구조를 설계하는 것도 쉽지 않았다. 그래서 코드보다 먼저 한글로 게임의 뼈대를 정리하기로 했다.

숫자 야구 게임에서 필요한 기능과 예외 처리를 하나씩 고민하면서 문장으로 풀어 정리했다. 사용자가 입력할 값은 어떤 조건을 만족해야 하는지, 랜덤 숫자는 어떻게 생성할지, 입력값을 검증하는 방식은 어떻게 구현할지 등 주요 로직을 차근차근 정리했다. 처음에는 그저 아이디어를 나열하는 수준이었지만, 매일 한글로 정리하면서 점점 더 체계적인 구조로 정리할 수 있었다.

빈 화면에서 바로 코드를 작성할 엄두가 나지 않았기 때문에, 제출 전날 오전까지도 코드보다는 한글로 로직을 작성하는 데 집중했다. 코드로 변환하는 과정이 쉽지는 않았지만, 꾸준히 한글로 정리한 내용을 구현하기 위한 문법을 하나씩 검색하고 학습했다. 특히, 다음 주부터 프로젝트가 본격적으로 진행된다는 이야기를 듣고, 이번 주를 개인 문법 학습의 마지노선으로 정했다. 이 기간 동안은 절대 ChatGPT를 사용하지 않고 스스로 공부하며 코드로 구현하는 연습을 하기로 다짐했다.

그렇게 매일 조금씩 고민하면서 수정해 나갔고, 결국 한글로 정리한 로직이 완성되었다. 드디어 코드로 변환할 준비가 되었고, 차근차근 하나씩 실제 코드로 구현해 나가기 시작했다.


단계별 코드 작성 과정

1차: 텍스트로 코드 정리

게임을 처음부터 코드로 작성하는 것이 부담스러워, 먼저 한글로 뼈대를 잡기로 했다. 숫자 야구 게임에서 필요한 기능과 예외 처리 등을 고민하면서 전체적인 흐름을 정리했다. 사용자의 입력을 어떻게 받을 것인지, 랜덤 숫자를 어떻게 생성할 것인지, 예외 처리(잘못된 입력값, 중복된 숫자 등)는 어떻게 할 것인지 등을 정리한 후, 이를 코드로 변환하는 방법을 고민하며 공부했다. 한글로 로직을 정리한 덕분에 이후 코드로 변환하는 과정이 훨씬 쉬워졌다.

/*
 클래스 BaseballGame

 게임실행 함수 gameStart
    프린트 출력 <게임을 시작합니다>
    게임실행 play() 함수 호출

 랜덤숫자 생성 함수 (파라미터 없고, 리턴값 있음)
    랜덤 숫자를 담을 배열
    반복문으로 랜덤 숫자를 생성
    중복 방지

 게임 실행 함수
    랜덤숫자 함수 끌어오기

    프린트 출력 <숫자를 입력하세요 (1~9 사이의 숫자 3개를 입력>
    사용자 입력 값을 받음
        옵셔널 바인딩으로 nil 예외처리
        옵셔널 체이닝으로 공백 제거
    세자리 숫자가 아닐 경우 다시 반복
    사용자 입력값을 배열로 저장
        문자열의 각 문자를 숫자 배열로 변환
    숫자에 0이 포함된 경우 다시 반복
        프린트 출력
    중복된 숫자가 있는 경우 다시 반복
        프린트 출력

    점수를 담을 변수 선언
        strike와 ball 초기값 변수 선언
    컴퓨터와 사용자의 숫자를 각각 비교

    게임 결과
        3개 다 맞추면 정답 출력 후 게임 종료
        스트라이크와 볼 개수를 출력
        맞춘 숫자가 없을 경우 Nothing 출력

 게임 인스턴스
 게임 실행함수 호출
*/

2차: 클래스와 게임 시작 함수 작성

한글로 작성한 로직을 코드로 옮겨가기 시작하면서, 가장 먼저 클래스와 게임 시작 함수를 작성했다. 숫자 야구 게임을 하나의 객체로 관리하기 위해 BaseballGame 클래스를 만들었고, 게임을 시작하는 gameStart() 함수를 작성했다. 게임이 시작되면 gameStart()가 실행되면서 play() 함수가 호출되도록 설계했다. 처음에는 play() 함수를 private으로 설정한 탓에 gameStart()에서 호출이 되지 않아 오류가 발생했다. 이 문제는 뒤에 트러블슈팅에서 설명할 예정.