[TIL-006] Dart로 콘솔 쇼핑몰 만들기-1

개요

Flutter로 진짜 쇼핑몰을 만들면 좋겠지만, 아직은 잘 알지 못하는 관계로 불가능하다.

대신 Dart언어에 익숙해지기 위해 콘솔에 값을 입력하여 진행되는 간단한 프로그램을 만들고자 한다.

 

기능

  • 각 기능에 번호를 붙여 사용자가 입력한 번호대로 프로그램을 동작한다.
  • 1번 - 판매하는 상품 목록을 볼 수 있다.
  • 2번 - 구매하고 싶은 상품들을 장바구니에 담을 수 있다
  • 3번 - 장바구니에 담은 상품들의 총가격을 볼 수 있다.
  • 4번 - 프로그램을 종료할 수 있다.

 

문제 발생

Dart에서 콘솔창에서 값을 입력하기 위해서는 `dart:io`라이브러리에 있는 `stdin.readLineSync()`를 이용할 수 있다.

그러나 한글을 입력하면 깨지는 현상이 발생했다.

String? userInput() {
  return stdin.readLineSync();
}

void main(List<String> arguments) {
  var products = ShoppingMall();
  var number = userInput(); // 사용자가 입력하는 부분

  switch (int.parse(number)) {
    case 1:
      print('상품 목록을 보여드릴게요~');
      products.showProducts();
      return;
    case 2:
      print('상품 이름을 입력해주세요.');
      var name = userInput();
      
      print('상품 개수를 입력해주세요.');
      var amount = userInput();
      print('$name상품을 $amount개 담으셨습니다.');
      return;
    case 3:
      return;
    case 4:
      return;
    default:
      '지원하지 않는 기능입니다! 다시 시도해 주세요..';
  }
}

반바지를 읽지 못하는 콘솔창

 

위 이미지처럼 한글로 입력은 가능하나 다시 반바지를 출력하니 ? 가 나온다.

 

발생 이유 추측

아무래도 프로그래밍 언어는 영어로 이루어져 있다보니 한글을 지원하지 않는 경우가 있을 것으로 생각했다.

그래서 인코딩? 디코딩? 같은 메서드로 형식을 바꾸면 되지 않을까 생각했다.

 

시도 방법

검색을 해보니 바로 나온 방법이다.

아마도 내가 예상한대로 인코딩 관련을 해결하는 코드인 것 같았다.

import 'dart:convert';

stdin.readLineSync(encoding: Encoding.getByName('utf-8')!);

그러나 예상과는 달리 해결이 되지 않았다.

 

결과(느낀 점)

이 문제는 아직 완벽하게 해결하지 못할 것 같다.

계속 검색하고 Dart 홈페이지도 가봤지만 해결법이 있진 않았다.

 

그래서 상품 이름을 영어로 바꾸고, 영어 외의 문자를 사용하면 상품 이름을 다시 선택하게끔 바꿔야 할 것 같다.