Flutter 9기 창업/📚 Today I Learned

[Flutter 9기 창업반] 앱 개발 창업 부트캠프 10일차 _ 개인과제 트러블 슈팅(TroubleShooting)

히니미니마니모✦🇸​​🇹​​🇴​​🇷​​🇾​✦ 2025. 12. 5. 10:44

🛠️ 개인과제 트러블 슈팅

필수과제 1) 점수에 맞는 등급 출력하기

  • 배경 :
    점수를 입력하면 A/B/C 등급을 출력하는 간단한 조건문 실습 진행.
  • 발단 :
    조건문 작성은 쉬울 줄 알았는데, 조건식 구조가 오류를 내면서 처음부터 혼란이 발생함.
  • 전개 :
    if (100 >= score >= 90)처럼 연속 비교를 써도 되는 줄 알고 그대로 작성
    → 연속 비교는 불가능하다는 사실을 몰랐음.
  • 위기 :
    오류가 계속 발생하면서 >= 두 번 이어 쓰면 왜 안 되는지, score가 어느 조건에서 걸리는지 판단조차 어려워짐.
    로직 자체가 꼬여버려 방향을 잃기 시작.
  • 절정 :
    결국 연속 비교 방식을 포기하고, 연산자 파트를 다시 복습하면서
    score <= 100 && score >= 90처럼 두 개의 조건을 논리연산자 && 로 묶어야 한다는 원리를 깨닫게 됨.
    조건식의 구조를 정확히 이해하게 되는 중요한 계기였음.
  • 결말 :
    조건문 설계 방식이 머릿속에 확실하게 자리 잡았고,
    이후 과제에서도 정확한 비교식 + 논리연산자 사용이 안정적으로 가능해짐.

필수과제 2) 쇼핑몰 장바구니 가격 계산하기

  • 배경 :
    Map에 상품명과 가격을 저장하고, 장바구니(List)에 담긴 상품들의 총 금액을 계산하는 실습 진행.
    장바구니 상태 출력 → 가격 합산 → 할인 적용까지 이어지는 구조.
  • 발단 :
    로직 자체는 단순해 보였지만 shop[item]에서 가격(value)을 가져오는 구조가 익숙하지 않아
    문자와 숫자 개념이 섞이기 시작함.
  • 전개 :
    for(String item in cart) 반복문은 이해했으나, shop[item]!의 느낌표 의미가 헷갈렸고,
    합산 과정에서는 total =+ shop[item]!처럼 잘못된 연산자(=+)가 계속 나와 총합이 정상적으로 계산되지 않음.
  • 위기 :
    장바구니 개수 출력, 총합 계산, 할인 조건, 최종 결제 출력이 한 코드에 몰리면서 변수명·조건 순서·출력 구조가 전부 꼬이기 시작.
    “할인은 언제 적용되는 거지?”, “최종 금액은 어디서 계산해?”처럼 전체 흐름을 파악하기 어려워짐.
  • 절정 :
    문제 해결을 위해 로직을 처음부터 완전히 분해하고
    1. 장바구니 상태 체크
    2. for문으로 가격 합산
    3. 조건문으로 할인 여부 판단
    4. 최종 결제 금액 출력 순서로 재정렬함.

      이 과정에서 shop[item]!의 느낌표가 null이 아님을 보장하는 연산자라는 개념도 이해하게 됨.
      전체 흐름을 직접 재구성한 중요한 경험이 되었음.
  • 결말 :
    총 금액이 정확히 계산되고,
    20,000원 이상일 때만 10% 할인 → 최종 결제 금액 출력이 안정적으로 구현됨.
    Map → List → for문 → 조건문으로 이어지는 프로그램 로직의 전형적인 흐름을 이해하면서
    이후 과제에서도 자연스럽게 응용할 수 있는 기반이 마련됨.

도전과제 1) 로또 번호 발급 & 초기화

  • 배경 :
    랜덤 숫자를 6개 뽑아 로또 번호를 만들고, 당첨 번호와 비교하여 일치 개수를 출력한 뒤
    마지막에 발급 번호를 초기화하는 프로그램 실습 진행.
  • 발단 :
    전체 구조를 이해했다고 생각했지만, 함수 내부에서 Set·List 전환, while문 조건, return 위치 등
    여러 개념이 한꺼번에 등장하면서 처음부터 복잡하게 느껴짐.
  • 전개 :
    while(nums.length < 6) 구조는 이해했으나 중괄호 위치, return의 위치,
    int n = Random().nextInt(45) + 1의 역할이 헷갈리기 시작함.
    특히 nums.add(n);을 어디에 넣어야 하는지 계속 꼬여서
    "랜덤 숫자를 만든 건 알겠는데… 세트에 언제 넣는 거지?"라는 혼란이 이어짐.
  • 위기 :
    함수가 길어지자 구조가 완전히 뒤섞이기 시작.
    괄호 개수 오류, return이 함수 밖에 있거나, while문 뒤에 세미콜론을 잘못 찍어 무한루프처럼 보이는 오류,
    contain 오타, $변수를 함수 매개변수에 쓰는 등
    에러가 연달아 발생하면서 “내가 뭘 틀린 건지 모르겠다” 상태가 됨.
    특히 초기화 부분에서 myLotto.clear()와 새 번호 발급이 어떤 관계인지도 정리가 안 됨.
  • 절정 :
    결국 전체 로직을 다시 해체하여
    1. Set로 번호 모으기
    2. while문으로 중복 없이 6개 채우기
    3. List로 변환해서 정렬
    4. 메인에서 비교
    5. clear로 초기화
      이 흐름을 한 줄씩 다시 조립함.
  • 결말 :
    로또 프로그램 전체 흐름을 스스로 다시 설계할 수 있게 되었고, while–Set–List–return 구조가 안정적으로 정착됨.
    오류가 많았던 만큼 구조 이해가 가장 크게 성장한 과제였으며, 함수·자료구조·반복문을 함께 사용하는 실전 감각을 얻는 계기가 됨.

 


📖 내가 느낀 어려웠던 점

프로그램을 작성하는 과정에서 가장 어려웠던 부분은 문법 자체보다는 여러 개념을 하나의 흐름으로 연결하는 구조를 잡는 것이었다.

각각의 개념(Set, List, Map, 조건문, 반복문 등)은 이해했음에도 불구하고, 실제 코드를 작성할 때는

어떤 것을 먼저 배치해야 하고 어떤 변수가 어디에서 사용되는지 흐름이 끊기곤 했다.

특히, 중복 제거·랜덤 생성·반복문·반환 같은 요소가 한 함수 안에 동시에 등장할 때 머릿속이 과부하되면서 순서가 뒤섞이거나,

괄호·세미콜론·메서드 이름 같은 사소한 오류 때문에 전체 로직이 멈추는 상황이 반복되었다.

또한 문법을 “기억해서 쓰는 방식”으로 접근하는 경향이 있어(물론 빠른 학습을 위함이지만),

코드를 칠 때마다 매번 새로 배우는 것처럼 느껴지고 한 줄만 틀려도 전체 구조를 잃어버리는 경우가 많았다.

이런 과정에서 좌절감도 있었지만, 결과적으로는 코드 작성 전에 구조를 먼저 설계하고,

작은 기능 단위로 쪼개서 순서대로 조립해야 한다는 것을 확실히 깨닫게 되었다.

 

📌 보완 방향 & 학습 계획

  • 로직을 먼저 설계하는 습관 만들기
    코드를 바로 치기 전에 기능을 단계별로 문장으로 먼저 정리하고, 흐름을 명확하게 만든 뒤 구현하는 방식으로 진행할 예정.
  • 기능을 작은 단위로 쪼개서 작성하기
    한 번에 길고 복잡한 코드를 작성하면 흐름이 꼬이기 쉬우므로,
    함수 단위로 잘게 나누고 테스트를 반복하며 완성하는 전략을 사용할 계획.
  • 문법보다 ‘이유’를 먼저 이해하는 학습 방식 유지
    외우는 방식보다 “왜 이렇게 구성해야 하는지”를 먼저 이해한 후 코드로 옮기는 방향으로 학습을 이어갈 예정.
    최대한 많이 써보는 실습 위주의 학습 방식 유지.
  • 오류 메시지 해석 능력 키우기
    괄호, 세미콜론, 타입 오류 등 사소한 문제도 빈번히 발생하므로 오류 메시지를 읽고 해결하는 연습도 필요하다 생각.
  • 기초 문법 반복 복습
    List / Map / Set / for-in / return / null 관련 문법 등 헷갈리는 기초 요소들을 꾸준히 짧게 반복, 실습하는 방식으로 보완할 예정.
  • 작은 성공을 빠르게 경험하는 학습 구조 유지
    난도 높은 문제보다 짧은 함수·작은 기능을 먼저 완성하며 자신감을 유지하고, 이후 단계별로 확장해 나가는 방식으로 학습 진행.