[25.06.26 TIL] ๊ฐœ์ธ ๊ณผ์ œ

๊น€์˜๋ฏผยท2025๋…„ 6์›” 26์ผ

๐ŸŽฏ ์˜ค๋Š˜์€ ๊ฐœ์ธ ๊ณผ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ์ œ์ถœํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์ž‘์—…ํ–ˆ๋‹ค.
์™„๋ฃŒ๋Š” ํ–ˆ์ง€๋งŒ ์ด TIL ์“ฐ๋Š”๊ฒŒ ์ข€ ๊ฑธ๋ ธ๋Š”๋ฐ ์ƒ๊ฐ์„ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ์ผ์ข…์˜ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ์ž‘์„ฑ์ด ๊ฑธ๋ ธ๋‹ค.


๐Ÿฅฝ ๊ฐœ์ธ ๊ณผ์ œ

๐Ÿ’ป ๊ธฐ๋Šฅ ๊ตฌํ˜„

๐Ÿ‘ฉโ€๐Ÿ’ป ์ž‘์—…

๐Ÿ“ lib/shopping_mall

// ์‡ผํ•‘๋ชฐ ํด๋ž˜์Šค
class ShoppingMall {
  List<Product> products = [];
  int totalPrice = 0;

  // ์ƒํ’ˆ๋ช…, ๊ฐ€๊ฒฉ
  ShoppingMall() {
    products.add(Product("์…”์ธ ", 45000));
    products.add(Product("์›ํ”ผ์Šค", 30000));
    products.add(Product("๋ฐ˜ํŒ”ํ‹ฐ", 35000));
    products.add(Product("๋ฐ˜๋ฐ”์ง€", 38000));
    products.add(Product("์–‘๋ง", 5000));
  }

  // ์ƒํ’ˆ ๋ชฉ๋ก ์ถœ๋ ฅ
  void showProducts() {
    for (var p in products) {
      print("${p.name} / ${p.price}์›");
    }
  }

  // ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋กœ์ง
  void addToCart(String productname, int productnumber) {
    // ์Œ์ˆ˜๊ฐ’ ์ฒ˜๋ฆฌ
    if (productnumber <= 0) {
      print("0๊ฐœ๋ณด๋‹ค ๋งŽ์€ ๊ฐœ์ˆ˜์˜ ์ƒํ’ˆ๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ์–ด์š” !");
      return;
    }

    // ์ƒํ’ˆ ์ฐพ๊ธฐ
    for (var i = 0; i < products.length; i++) {
      var pd = products[i];

      // ์ƒํ’ˆ ๋‹ด๊ธฐ ์„ฑ๊ณต ๋กœ์ง
      if (productname == pd.name) {
        totalPrice += productnumber * pd.price;
        print("์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์ด ๋‹ด๊ฒผ์–ด์š” !");
        return;
      }
    }

    // ์ž…๋ ฅ๊ฐ’ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
    print("์ž…๋ ฅ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์•„์š” !");
  }

  // ์ด ๊ฐ€๊ฒฉ ์ถœ๋ ฅ
  void showTotal() {
    print("์žฅ๋ฐ”๊ตฌ๋‹ˆ์— $totalPrice์› ์–ด์น˜๋ฅผ ๋‹ด์œผ์…จ๋„ค์š” !");
  }
}

// ์ƒํ’ˆ ํด๋ž˜์Šค
class Product {
  String name;
  int price;

  Product(this.name, this.price);
}

๐Ÿ’ฌ ์ด์–ด์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, String ์œผ๋กœ ์ƒํ’ˆ๋ช…, int๋กœ ์ƒํ’ˆ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ›๋„๋ก ํ•˜์˜€๋‹ค.

๊ณผ์ œ ๋‚ด์šฉ์ฒ˜๋Ÿผ if ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Œ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ์œ„์— ๋กœ์ง, ์•„๋‹ˆ๋ผ๋ฉด ์•„๋ž˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ–ˆ๋‹ค.


๐Ÿ’ฌ ์—ฌ๊ธฐ์„œ for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ products.length ๋งŒํผ ๋ฐ˜๋ณต์‹œํ‚ค๊ณ , ์ƒํ’ˆ๋ช…์„ ๋Œ€์กฐํ•˜์—ฌ ๋งค์น˜๋œ๋‹ค๋ฉด ์ƒํ’ˆ์ด ๋‹ด๊ฒผ๋‹ค๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งค์น˜๋˜์—ˆ๋‹ค๋ฉด return ์‹œ์ผœ ํ•ด๋‹น ๋กœ์ง์„ ๋๋‚ด๊ณ , ์•ˆ๋˜์—ˆ๋‹ค๋ฉด ์ž…๋ ฅ๊ฐ’ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

์ด๋•Œ ์ € var i, var pd ๋ณ€์ˆ˜ 2๊ฐœ๊ฐ€ ํ•„์š”ํ–ˆ๋Š”๋ฐ, for (var pd in products) ๋ฅผ ์‚ฌ์šฉํ•˜๋ คํ•˜๋‹ค ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ์ด๊ฒŒ ๋ณ€์ˆ˜๊ฐ€ ํ—ท๊ฐˆ๋ ค์„œ? ์ดํ•ด๊ฐ€ ์•ˆ๋œ ์ƒํƒœ๋กœ ํ•˜๋ ค๋‹ค๊ฐ€ ๋‹ค์‹œ ๊ธฐ๋ณธ for ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.


๐Ÿ’ฌ ๊ฐ€๊ฒฉ์˜ ๊ฒฝ์šฐ += ํ•ด๋‹น totalPrice ์— ์ƒํ’ˆ์˜ ๊ฐœ์ˆ˜๋งŒํผ์˜ ๊ธˆ์•ก์ด ๋‹ด๊ธฐ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ์ฃผ์„๋„ ๊น”๋”ํ•˜๊ฒŒ ํ•ด๋‹น ๋กœ์ง ์œ„์— ๋‹ฌ์•„์ฃผ์—ˆ๋‹ค.


๐Ÿ’ฆ ์ƒ๊ฐ๋ณด๋‹ค ์ € if for ๋ฌธ์— ์‹œ๊ฐ„์„ ๋งŽ์ด ํ• ์• ํ–ˆ๋Š”๋ฐ, ์šฐ์„  productnumber ๋ฅผ productname ๋ณด๋‹ค ์•ž์— ๋ฐฐ์น˜ํ•˜์—ฌ์„œ, ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ๋ฅผ ๋’ค์ง€๊ณ  ๊ฐ’์ด ์—†์–ด์„œ ๋กœ์ง์„ ํƒ€๋Š” ๊ฒƒ์ด ์•„๋‹Œ! ๋จผ์ € ์ˆซ์ž์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟจ๋‹ค.

๊ทธ๋ฆฌ๊ณ , bool ์„ ์„ ์–ธํ•ด์„œ false๊ฐ€ ๋˜๊ณ , true๊ฐ€ ๋˜๋ฉด? ์ด๋Ÿฐ์‹์œผ๋กœ ์ œ์–ด๋ฅผ ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์‚ฌ์‹ค์ƒ ์ˆซ์ž๊ฐ€ ์˜ณ์€ ๊ฐ’์ผ๊ฒฝ์šฐ, ๊ทธ๋ฆฌ๊ณ  ์•„๋‹ ๊ฒฝ์šฐ, if์—์„œ ์ƒํ’ˆ์„ ์ฐพ์•˜์„ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์„ค์ •์—†์ด print ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ฌด๊ฒƒ๋„ ํ•ด๋‹นํ•˜์ง€ ์•Š์„ ๋•Œ ํ•ด๋‹น ๋กœ์ง์„ ํƒ€๋„๋ก ํ–ˆ๋‹ค.

์ด ๋ถ€๋ถ„์—์„œ ์ œ์ผ ์–ด๋ ค์› ๋˜๊ฑด var pd = products[i]; ์—ฌ๊ธฐ ๋ฐ˜๋ณตํ•˜๊ณ  ์ด๊ฑธ pd.name, productname ๋‘๊ฐœ๋ฅผ ๋น„๊ตํ•˜๊ฒŒ ํ•ด์•ผ๋๋‹ค๋Š”๊ฑธ ๋ชฐ๋ผ์„œ? ํ—ท๊ฐˆ๋ ค์„œ ์ด ๋ณ€์ˆ˜๋ผ๊ณ  ํ•ด์•ผ๋ ๊นŒ.. ๊ฐ’ ๋น„๊ต๊ฐ€ ์–ด๋ ค์› ๋‹ค.


๐Ÿ“ bin/shopping_mall

import 'dart:convert';
import 'dart:io';

import 'package:shopping_mall/shopping_mall.dart';

void main(List<String> arguments) {
  // ์‡ผํ•‘๋ชฐ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
  var shoppingMall = ShoppingMall();

  // ์‡ผํ•‘๋ชฐ ๋ฉ”๋‰ด
  String menu =
      '[1] ์ƒํ’ˆ ๋ชฉ๋ก ๋ณด๊ธฐ / [2] ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธฐ / [3] ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธด ์ƒํ’ˆ์˜ ์ด ๊ฐ€๊ฒฉ ๋ณด๊ธฐ / [4] ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ';
  String line = '-' * (menu.length + 20);

  // ์‡ผํ•‘๋ชฐ ๋ฉ”์ธ ๋กœ์ง
  while (true) {
    print(line);
    print(' $menu');
    print(line);

    // ์ž…๋ ฅ๊ฐ’ ๋ณ€ํ™˜, ๊ณต๋ฐฑ ์ œ๊ฑฐ
    String? numberInput = stdin.readLineSync()?.trim();

    //์ƒํ’ˆ ๋ชฉ๋ก ์ถœ๋ ฅ ๋กœ์ง
    if (numberInput == "1") {
      shoppingMall.showProducts();
    }
    // ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋กœ์ง
    else if (numberInput == "2") {
      print('์ƒํ’ˆ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š” !\n');

      // ์ž…๋ ฅ ๊ฐ’ ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ
      String? productname =
          stdin.readLineSync(encoding: Encoding.getByName('utf-8')!)?.trim();

      print('์ƒํ’ˆ ๊ฐœ์ˆ˜์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š” !\n');

      // ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ ๋ฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ null ๋ฐ˜ํ™˜
      String? productnumberInput = stdin.readLineSync()?.trim();
      int? productnumber = int.tryParse(productnumberInput!);

      // ์ž…๋ ฅ๊ฐ’ ์ฒ˜๋ฆฌ ๋กœ์ง
      if (productnumber != null) {
        shoppingMall.addToCart(productname!, productnumber);
      } else {
        print("์ž…๋ ฅ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์•„์š” !");
      }
    }
    // ์ด ๊ฐ€๊ฒฉ ์ถœ๋ ฅ
    else if (numberInput == "3") {
      shoppingMall.showTotal();
    }
    // ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ๋กœ์ง
    else if (numberInput == "4") {
      print("์ด์šฉํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ~ ์•ˆ๋…•ํžˆ ๊ฐ€์„ธ์š” !");
      break;
    }
    // ๊ทธ์™ธ๊ฐ’ ์ž…๋ ฅ ์‹œ ๋Œ€์‘
    else {
      print("์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค ! ๋‹ค์‹œ ์‹œ๋„ํ•ด ์ฃผ์„ธ์š” ..");
    }
  }
}

๐Ÿ’ฌ ์šฐ์„  ์‡ผํ•‘๋ชฐ ๋ฉ”๋‰ด ์ถœ๋ ฅ์ด ๋ชป์ƒ๊ฒจ์„œ.. menu ์™€ line ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ณ€์ˆ˜ ๊ฐ’์— ๋„ฃ์–ด์„œ ์‡ผํ•‘๋ชฐ ๋ฉ”์ธ ๋กœ์ง์—์„œ ์ถœ๋ ฅํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๊ณ , menu.length ๋ณด๋‹ค ์—ฌ์œ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.


๐Ÿ’ฌ ๊ทธ๋ฆฌ๊ณ  ์˜ค๋ฅ˜ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด .trim() ์œผ๋กœ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ–ˆ๊ณ , ์ž…๋ ฅ ์ปค์„œ๊ฐ€ ์ถœ๋ ฅ ๋ฌธ์žฅ ๋’ค์— ๋ถ™์–ด ์žˆ์–ด์„œ \n ์œผ๋กœ ๋ณด๊ธฐ ์ข‹๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค.


๐Ÿ’ญ ์ œ์ผ ์†์ฉ์˜€๋˜... (ํ›„์ˆ ) String? productname = stdin.readLineSync(encoding: Encoding.getByName('utf-8')!)?.trim(); ์—ฌ๊ธฐ์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์„œ null์„ ๊ตฌ๋ถ„ํ•ด์„œ ํƒ€์ž…์„ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

์•„๋ž˜ int? productnumber = int.tryParse(productnumberInput!); ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ์„ฑ๊ณตํ•˜๋ฉด ๋กœ์ง, ์‹คํŒจํ•˜๋ฉด null์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜์—ฌ, productnumber != null ์ด ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ productname ๊ณผ productnumber ๋ฅผ ์ž…๋ ฅ๋ฐ›์•˜๋‹ค.

์ด null ์ด๋ž€ ๊ฐ’์„ int? ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ›์ง€๋งŒ ๊ฒฐ๊ตญ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด.. ์ฃฝ๊ธฐ ๋•Œ๋ฌธ์— ์ด null ํ—ˆ์šฉ, null safe ๊ฐ™์€๊ฒŒ ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ! ? ๋ฅผ ์ ์žฌ์ ์†Œ์— ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•œ๋‹ค.


๐Ÿ’ฌ ๊ทธ ์™ธ์— ์ด ๊ธˆ์•ก์„ ์ถœ๋ ฅํ•˜๋Š”๊ฑด ๋„ˆ๋ฌด... ์‰ฌ์› ๋‹ค.. ๋น„๊ตํ•˜์ž๋ฉด. ๊ทธ๋ฆฌ๊ณ  ์ž‘์—…ํ•˜๋ฉด์„œ ๋Œ€์ถฉ ์ผ๋˜ ์ฃผ์„๊นŒ์ง€ ๊น”๋”ํ•˜๊ฒŒ ์ ๊ณ  ๊ณผ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌ ํ–ˆ๋‹ค.


โ— ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

โ— ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ ์˜ค๋ฅ˜

โŒ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๋•Œ ๋‚˜์˜ค๋Š” ๋ฌธ์žฅ์ด ์ถœ๋ ฅ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ


๐Ÿ’ญ ์ฒ˜์Œ์—๋Š” ๋กœ์ง๋Œ€๋กœ ์•ˆ๋˜๊ณ  ์˜†์œผ๋กœ ๋น ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ, ๋กœ์ง์„ ์žฌ์ ๊ฒ€ ํ•ด๋ดค์ง€๋งŒ ๋ฌธ์ œ์ ์„ ์ฐพ์ง€ ๋ชปํ•จ.

โŒ ๊ณต๋ฐฑ ๋ฌธ์ œ์ธ๊ฐ€? ํ•˜์—ฌ, ๋’ค์— ๊ณต๋ฐฑ์„ ์—†์• ์ฃผ๋Š” ์ฝ”๋“œ .trim() ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ, ๊ณต๋ฐฑ์„ ์—†์• ๊ณ  ๊ฐ’์„ ๋น„๊ตํ•˜๋„๋ก ์„ค์ •ํ•จ.
// ๊ทธ๋Ÿฌ๋‚˜ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ ๋ฐœ์ƒ


๐Ÿ‘‰ ์ œ์ผ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ธ ์ž…์ถœ๋ ฅ์„ print ํ•ด์„œ, ์–ด๋””๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•จ.

โ— ๊ทธ ๊ฒฐ๊ณผ ์ œ๋Œ€๋กœ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ , p๋กœ ์ž…๋ ฅ ๋˜๋Š” ํ˜„์ƒ์„ ๋ฐœ๊ฒฌ


๐Ÿ’ญ ์˜์–ด๋Š” ๋ฌธ์ œ์—†์ด ์ž…๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณด์•„ ํ•œ๊ธ€์„ ๋ชป์ฝ๊ฑฐ๋‚˜ ํ•˜๋Š” ๋ฌธ์ œ์ธ ๊ฒƒ์œผ๋กœ ํŒŒ์•…

โŒ ๊ทธ๋ž˜์„œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด chcp 65001 ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ๋จผ์ € ์ž…๋ ฅํ•œ ๋’ค dart run ์„ ๋Œ๋ฆฌ๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค๊ณ  ํ•ด์„œ ์‹œ๋„ํ–ˆ์œผ๋‚˜ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ.


// @dart=2.19
// coding:utf-8

โŒ ํŒŒ์ผ ์ƒ๋‹จ์— ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด utf-8 ์„ ์ด์šฉํ•ด ํ•œ๊ธ€์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜์—ฌ run ์‹คํ–‰
// ๊ทธ๋Ÿฌ๋‚˜, ์—ฌ์ „ํžˆ ์ž…๋ ฅํ•˜๋ฉด p ๋งŒ์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค.


โŒ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ [์†์„ฑ - ๊ธ€๊ผด - ํฐํŠธ ๋ณ€๊ฒฝ] ์„ ํ•˜๋ฉด ํ•œ๊ธ€์ด ๊นจ์ง€๋Š” ์ด์Šˆ์— ๋Œ€ํ•ด ํ•ด๊ฒฐ๋œ๋‹ค๊ณ  ํ•˜์—ฌ ๋ฐ”๊ฟ”๋ณด์•˜์œผ๋‚˜, ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์ง€์†๋จ.


String? productname =
          stdin.readLineSync(encoding: Encoding.getByName('utf-8')!)?.trim();

โŒ ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ stdin.readLineSync(encoding: Encoding.getByName('utf-8'))?.trim(); ์ด๋ž€ ์ธ์ฝ”๋”ฉ ์ฝ”๋“œ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌ, ์ฝ”๋“œ์— ์ถ”๊ฐ€

๐Ÿ‘‰ ์ฝ”๋“œ ์ž์ฒด ์˜ค๋ฅ˜ ๋ฐœ์ƒ์œผ๋กœ Encoding? ํƒ€์ž… ๋•Œ๋ฌธ์ด๋ž€ ๋ฉ”์„ธ์ง€์— ! ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฝ”๋“œ ์˜ค๋ฅ˜๋Š” ํ•ด๊ฒฐ
// ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ๊ฐ€ ์ง€์†๋จ.


โ” ์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•œ ์ฝ”๋“œ๋“ค์„ ๋‹ค๋ฅธ ์ปด์—์„œ ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•จ. ๊ทธ๋Ÿฌ๋‚˜, ๋‚ด vscode ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•˜๊ณ , ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ X, ๋‹ค๋ฅธ ๊ณณ์˜ vscode์—์„œ ์‹คํ–‰ํ•ด๋„ ๋ฌธ์ œ ์—†์Œ. >> ์ด์ƒํ•œ ํ˜„์ƒ์„ ๋ฐœ๊ฒฌ๐Ÿ’ฆ

ํ•ด๋‹น ํ˜„์ƒ์„ ํ† ๋Œ€๋กœ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ ์„ค์ • ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์•„ ์ปดํ“จํ„ฐ ์ธ์ฝ”๋”ฉ? ์„ธํŒ… ๋ณ€๊ฒฝ์„ ํ•ด์•ผ๋˜๋Š” ๊ฒƒ์ธ์ง€.. ์ฐพ์•„๋ณด๋‹ˆ ์•„๋ž˜ ๋ฐฉ๋ฒ•์„ ์“ฐ๋ผ๊ณ  ํ•จ.
์ œ์–ดํŒ โ†’ ์‹œ๊ณ„ ๋ฐ ๊ตญ๊ฐ€ โ†’ ๊ตญ๊ฐ€ โ†’ ๊ด€๋ฆฌ์ž ํƒญ โ†’ ์‹œ์Šคํ…œ ๋กœ์บ˜ ๋ณ€๊ฒฝ โ†’ "์œ ๋‹ˆ์ฝ”๋“œ UTF-8 ๋ฒ ํƒ€ ์‚ฌ์šฉ"
? ์ด ์˜ต์…˜ ํ‚ค๋ฉด ๋œ๋‹ค๊ณ ๋Š” ํ•˜๋Š”๋ฐ... ๋‹ค๋ฅธ ์ปด์—์„œ๋Š” ์ด ์˜ต์…˜์ด ์ฒดํฌ๊ฐ€ ์•ˆ๋˜์–ด ์žˆ์–ด๋„ ๋Œ์•„๊ฐ„๋‹ค๋Š” ๊ฒƒ...


โœ… Fork๋กœ Commitํ•ด์„œ Mac์—์„œ ํŒŒ์ผ์„ ๋Œ๋ ค๋ณด์•˜๋”๋‹ˆ, ๋ชจ๋“ ๊ฒŒ ์ •์ƒ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ–ˆ๋‹ค... ์•„๋งˆ ์ œ์ผ ๋งˆ์ง€๋ง‰์— ํ–ˆ๋˜ ์ธ์ฝ”๋”ฉ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์„œ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™๊ธดํ•œ๋ฐ ์ปดํ“จํ„ฐ ์œˆ๋„์šฐ ๋ฒ„์ „ ๋•Œ๋ฌธ์ธ์ง€.. ์ผ๋‹จ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ ํƒ€๋Š” ์ผœ๋‘์—ˆ๊ณ , ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
๊ฒฐ๊ณผ์ ์œผ๋กœ! ํ•ด๊ฒฐ์ด ๋˜์—ˆ๋‹ค! ๋‹ค ์™„๋ฃŒ๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ ์ด๊ฒŒ ์ปดํ“จํ„ฐ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ํ•œ๋™์•ˆ ์žก๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค...


๐Ÿ’ฌ REDAME ์ž‘์„ฑ

๐Ÿฆ Dart Console Shopping Mall

ย 
Dart ์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•œ ์ฝ˜์†” ๊ธฐ๋ฐ˜ ์‡ผํ•‘๋ชฐ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ, ์ด ๊ธˆ์•ก ํ™•์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“š ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ Dart ๊ฐ•์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

ย 
/shopping_mall
โ”œโ”€โ”€ bin/ # ์‹คํ–‰ ํŒŒ์ผ
โ”‚ โ””โ”€โ”€ shopping_mall.dart
โ”œโ”€โ”€ lib/ # ํด๋ž˜์Šค, ๊ธฐ๋Šฅ ๋กœ์ง
โ”‚ โ””โ”€โ”€ shopping_mall.dart
โ”œโ”€โ”€ test/ # ํ…Œ์ŠคํŠธ ํŒŒ์ผ (ํ•„์š”์‹œ)
โ”œโ”€โ”€ pubspec.yaml # ์˜์กด์„ฑ ๋ฐ ๋ฉ”ํƒ€ ์ •๋ณด
โ””โ”€โ”€ README.md # ํ”„๋กœ์ ํŠธ ์„ค๋ช… ํŒŒ์ผ


๐Ÿš€ ์‹คํ–‰ ๋ฐฉ๋ฒ•

dart run bin/shopping_mall.dart

๐Ÿ›  ๊ธฐ๋Šฅ ์†Œ๊ฐœ

  • ๐Ÿ“œ ์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ
  • ๐Ÿ›’ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ
  • ๐Ÿ’ฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ด ๊ธˆ์•ก ํ™•์ธ
  • โŒ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ

๐ŸŽฏ ์‚ฌ์šฉ ๊ธฐ์ˆ 

  • Dart(์ฝ˜์†” ๊ธฐ๋ฐ˜)
  • OOP(ํด๋ž˜์Šค, ๊ฐ์ฒด์ง€ํ–ฅ)
  • ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ํ•จ์ˆ˜, ๋ฆฌ์ŠคํŠธ ๋“ฑ Dart ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ํ™œ์šฉ

โœจ ํ”„๋กœ์ ํŠธ ๋ชฉ์ 

  • Dart ๋ฌธ๋ฒ• ํ•™์Šต ๋ฐ ์ฝ˜์†” ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ ์—ฐ์Šต
  • ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•œ ์‹ค์Šต
  • ๊ฐ„๋‹จํ•œ ์ž…๋ ฅ/์ถœ๋ ฅ ๋กœ์ง์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ ๊ฐ•ํ™”

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

  • ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉ Dart ๊ฐ•์˜
  • ๊ณต์‹ Dart ๋ฌธ์„œ https://dart.dev

๐Ÿพ ์•ž์œผ๋กœ ๊ฐœ์„ ํ•˜๋ฉด ์ข‹์€ ๊ธฐ๋Šฅ

  • ์ƒํ’ˆ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ
  • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ชฉ๋ก ์ถœ๋ ฅ
  • ํŒŒ์ผ ์ €์žฅ ๋ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ(๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ)

์ด๋ ‡๊ฒŒ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ , README๊นŒ์ง€ ์ž‘์„ฑ์„ ์™„๋ฃŒํ–ˆ๋‹ค.

๊ฐœ์„ ํ•˜๋ฉด ์ข‹์€ ๊ธฐ๋Šฅ์ด๋‚˜, ๋„์ „ ๊ณผ์ œ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜์—ฌ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
์ฒ˜์Œ ํ•˜๋‹ค๋ณด๋‹ˆ ์‚ฌ์†Œํ•œ ์˜ค๋ฅ˜์— ํ•œ์ฐธ์ด๋‚˜ ๊ฑธ๋ฆฌ๊ณ , ๊ทธ๊ฑธ AI๋ฅผ ํ™œ์šฉํ•ด๋„ ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๊ฑฐ๋‚˜ ํ•˜๋Š” ๋“ฑ์˜ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ถ„๋ฐฐ๋ผ๊ณ  ํ•ด์•ผ๋ ๊นŒ... ์–ด๋ ค์› ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์‚ฌ์‹ค์ƒ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์€ ์–ด์ œ ์ข€ ๋งŒ๋“ค๊ณ  ์˜ค๋Š˜ ์ถ”๊ฐ€๊นŒ์ง€ ์™„๋ฃŒํ•ด์„œ ์‹œ๊ฐ„์€ ๋‚˜๋ฆ„ ๊ดœ์ฐฎ์•˜๋Š”๋ฐ, ์ด ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ๊ฐ€... ์ปดํ“จํ„ฐ ๋ฌธ์ œ๋•Œ๋ฌธ์ด๋ผ๋‹ˆ... ํ—ˆํƒˆํ•˜๋‹ค... ๐Ÿ’ซ


๐ŸŒผ Git Commit

๊ธฐ๋Šฅ ๊ตฌํ˜„
โœ… ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
โœ… ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ฐ€๊ฒฉ ์ถœ๋ ฅ ๊ตฌํ˜„


๐Ÿ’ก ์ฝ”๋“œ ์ˆ˜์ • ๋ฐ README ์ž‘์„ฑ
โœ… ์‡ผํ•‘๋ชฐ ๋ฉ”์ธ ๋ฉ”๋‰ด ๋ผ์ธ ์ฝ”๋“œ ์ˆ˜์ •
โœ… ๊ณผ์ œ ์†Œ๊ฐœ README ์ž‘์„ฑ


๐ŸŒฑ ์˜ค๋Š˜์€ ๊ณผ์ œ๋ฅผ ์™„๋ฃŒํ•˜๊ณ  ์˜ค๋ฅ˜ ํ•ด๊ฒฐํ•˜๊ณ ... ์ปค๋ฐ‹ํ•˜๊ณ .. TIL ์ž‘์„ฑํ–ˆ๋‹ค. ๋ญ”๊ฐ€ ๋“œ๋””์–ด ํ•ด๋ƒˆ๋‹ค์™€ ๋ง‰ํž ๋• ํ•œ์—†์ด ์–ด๋ ค์šด๋ฐ ํ•œ๋ฒˆ ํ•ด๊ฒฐํ•˜๋ฉด ๋ญ”๊ฐ€ ๊ทธ์ œ์„œ์•ผ ์ดํ•ด๋˜๊ณ  ์ด๋ ‡๊ฒŒ ์‰ฌ์› ๋‚˜..? ์‰ฌ์šด๊ฑด ์•„๋‹ˆ์ง€๋งŒ! ๊ทธ๋Ÿฐ ๋А๋‚Œ์ด์—ˆ๋‹ค.

์ด๋ก ๋งŒ ์•Œ๊ณ  ๊ธฐ์ดˆ๋งŒ ์•Œ๋‹ค๊ฐ€ ์ด๊ฒŒ ์‹ฌํ™”๋ฅผ ํ•˜๋ ค๋‹ˆ๊นŒ ๋ง‰๋ง‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€๋ฐ, ์ˆ˜ํ•™ํ•˜๊ณ  ์ง„์งœ ๋˜‘๊ฐ™์€ ๋А๋‚Œ์ด๋‹ค. ์ˆ˜์‹ ์•Œ๊ณ  ๊ธฐ์ดˆ๋Š” ์•„๋Š”๋ฐ ์ด๊ฑธ ์‹ฌํ™” ๋ฌธ์ œ๋ฅผ ๋‚ธ๋‹ค? ๊ทธ๋Ÿฌ๋ฉด ์–ด๋ ต๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฒ•์„ ๋ชฐ๋ผ์„œ ์ผ๋‹จ ํ•œ๋ฒˆ ์•Œ์•„์•ผ ๊ทธ์ œ์„œ์•ผ ๋‹ค์Œ์— ์“ธ ์ˆ˜ ์žˆ์„ ๋ฒ•ํ•œ ๋А๋‚Œ์ด๋‹ค.

์•„๋ฌดํŠผ ๋‹ค์Œ ๊ณผ์ œ๋Š” ์ข€ ๋” ์ž˜.. ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ!


๐Ÿš€ ๋‚ด์ผ์€ 3๊ฐ• ๋‚จ์€ ๊ฒƒ์„ ๋งˆ์ € ๋“ฃ๋Š”๋ฐ, ์˜คํ›„์— ๊ณผ์ œ ํ’€์ด ์‹œ๊ฐ„์ด ์žˆ์–ด์„œ ํ•ด๋‹น ์‹œ๊ฐ„์ด ๋๋‚˜๋ฉด ์ฝ”๋“œ.. ์ˆ˜์ •์„ ์‹œ๋„๋ฅผ ํ•ด๋ณผ์ง€? ์•„๋‹ˆ๋ฉด TIL ์ •๋ฆฌ ์ •๋„๋กœ ๋๋‚ผ์ง€ ๋ด์•ผ๊ฒ ๋‹ค. ์ฝ”๋”ฉ์— ์ •๋‹ต.. ์ด๋ผ๊ณ ๋Š” ์—†๋‹ค์ง€๋งŒ ๋””ํดํŠธ, ์ตœ์ ํ™” ๋œ ์ฝ”๋“œ๋Š” ์žˆ์œผ๋‹ˆ๊นŒ ์ž˜ ๋ฐฐ์›Œ๋‘ฌ์•ผ ํ•œ๋‹ค.

profile
๐Ÿ’ป [25.05.26~] Flutter ๊ณต๋ถ€์ค‘โณ

0๊ฐœ์˜ ๋Œ“๊ธ€