Flutter의 기반이 되는 Dart 언어로 콘솔창에서 작동하는 간단한 쇼핑 기능을 구현해보려고 해요. 우리가 만들 프로그램에서는 다음과 같은 기능을 포함할 거예요.
- 판매하는 상품 목록을 출력하는 기능
- 상품을 장바구니에 담는 기능
- 장바구니에 담긴 상품 목록과 총 가격을 확인하는 기능
- 프로그램을 종료하는 기능
이 기능들을 구현하면서 Dart에서 클래스 사용법, 리스트와 맵 활용, 사용자 입력 처리 방법을 배워볼 거예요.
그럼 첫 번째 기능부터 하나씩 살펴볼까요?
판매하는 상품 목록 출력하기
먼저 쇼핑몰에서 판매하는 상품 목록을 출력하는 기능을 만들어 볼 거예요. 이를 위해 상품(Product) 클래스를 만들고, 쇼핑몰(ShoppingMall) 클래스에서 상품 목록을 관리하도록 할 거예요.
1) 상품을 나타내는 Product 클래스 만들기
상품 정보를 저장하려면 상품명과 가격을 가지고 있어야 해요. 이를 위해 Product 클래스를 만들어 볼게요.
class Product {
String name;
int price;
Product(this.name, this.price);
}
이제 Product 클래스를 이용해서 여러 개의 상품을 저장할 수 있어요.
2) 상품 목록을 저장할 ShoppingMall 클래스 만들기
쇼핑몰에서는 여러 개의 상품을 관리해야 해요. 이를 위해 리스트(List) 를 활용해서 상품 목록을 저장할 거예요.
class ShoppingMall {
List<Product> products;
ShoppingMall(this.products);
}
3) 상품 목록을 출력하는 메서드 만들기
void showProducts() {
print("\n--- 판매하는 상품 목록 ---");
for (var product in products) {
print("${product.name} / ${product.price}원");
}
}
4) 프로그램 실행 코드 추가
이제 main() 함수에서 ShoppingMall 객체를 만들고, showProducts() 메서드를 호출해 봐요.
void main() {
ShoppingMall shoppingMall = ShoppingMall([
Product("셔츠", 45000),
Product("원피스", 30000),
Product("반팔티", 35000),
Product("반바지", 38000),
Product("양말", 5000),
]);
shoppingMall.showProducts();
}
해당 메서드를 호출하면 아래와 같은 결과를 볼 수 있어요.
--- 판매하는 상품 목록 ---
셔츠 / 45000원
원피스 / 30000원
반팔티 / 35000원
반바지 / 38000원
양말 / 5000원
다음으로는 장바구니 기능을 구현해 볼게요.
상품을 장바구니에 담기
쇼핑몰에서는 고객이 원하는 상품을 선택해서 장바구니에 담을 수 있어야 해요. 이를 위해 사용자로부터 입력을 받아 장바구니(cart)에 상품을 추가하는 기능을 만들 거예요.
1) 장바구니를 저장할 Map 데이터 구조 만들기
상품을 장바구니에 담을 때, 상품명과 개수를 함께 저장해야 해요. 이를 위해 맵(Map) 을 사용할 거예요.
class ShoppingMall {
List<Product> products;
Map<Product, int> cart = {}; // 장바구니 (상품과 개수를 저장)
int total = 0; // 장바구니 총 가격
ShoppingMall(this.products);
}
2) 장바구니에 상품을 추가하는 메서드 만들기
void addToCart() {
print("\n장바구니에 담을 상품명을 입력하세요:");
String? productName = stdin.readLineSync();
print("구매할 개수를 입력하세요:");
String? quantityInput = stdin.readLineSync();
// 입력값 검증
if (productName == null || quantityInput == null) {
print("입력값이 올바르지 않아요 !");
return;
}
int quantity;
try {
quantity = int.parse(quantityInput);
} catch (e) {
print("입력값이 올바르지 않아요 !");
return;
}
if (quantity <= 0) {
print("0개보다 많은 개수의 상품만 담을 수 있어요 !");
return;
}
// 상품 찾기
Product? selectedProduct = products.firstWhere(
(p) => p.name == productName,
orElse: () => Product("", 0),
);
if (selectedProduct.name.isEmpty) {
print("입력값이 올바르지 않아요 !");
return;
}
// 장바구니에 추가
if (cart.containsKey(selectedProduct)) {
cart[selectedProduct] = cart[selectedProduct]! + quantity;
} else {
cart[selectedProduct] = quantity;
}
total += selectedProduct.price * quantity;
print("장바구니에 상품이 담겼어요 !");
}
해당 기능을 아래와 같이 사용해볼 수 있어요.
장바구니에 담을 상품명을 입력하세요:
반팔티
구매할 개수를 입력하세요:
2
장바구니에 상품이 담겼어요 !
장바구니 확인 및 프로그램 종료 기능 구현하기
이제 장바구니에 담긴 상품 목록과 총 가격을 출력하는 기능을 구현할 차례예요. 또한 사용자가 프로그램을 종료할 수 있는 기능도 추가해볼게요!
1) 장바구니 확인 및 총 가격 출력
void showTotal() {
if (cart.isEmpty) {
print("\n장바구니에 담긴 상품이 없습니다.");
return;
}
String cartItems = cart.keys.map((p) => p.name).join(", ");
print("\n장바구니에 $cartItems이(가) 담겨있네요. 총 ${total}원 입니다!");
}
장바구니가 비어있는 상황과, 그렇지 않은 상황을 구분해 봤어요.
2) 프로그램 종료 기능
bool confirmExit() {
print("\n정말 종료하시겠습니까? (5 입력 시 종료)");
String? input = stdin.readLineSync();
if (input == "5") {
print("이용해 주셔서 감사합니다 ~ 안녕히 가세요 !");
return true;
} else {
print("종료하지 않습니다.");
return false;
}
}
마치며...
이번 글에서는 Dart를 사용해 아주아주 간단한 쇼핑 기능을 구현해 봤어요. 이 기능들을 토대로 멋진 쇼핑몰을 만들 수 있게 되면 좋겠네요! 다음에도 Dart 학습에 도움이 될 만한 작은 프로젝트에 대해서 업로드해볼게요!
'IT' 카테고리의 다른 글
바이브 코딩이란 무엇인가? (0) | 2025.03.21 |
---|---|
플러터 개발을 위한 기본 라이브러리 (0) | 2025.03.14 |
플러터 Provider 사용법 (0) | 2025.03.13 |
플러터 스크롤을 활용한 기능 만들기 (2) | 2025.03.12 |
플러터에서 하단 탭 만들기 (0) | 2025.03.11 |