Dart로 간단한 콘솔 기반의 쇼핑몰 프로그램을 개발했다. 사용자는 상품을 장바구니에 추가하고, 장바구니 내용을 확인하며, 총 가격을 계산할 수 있다. 또한 장바구니를 초기화하거나 프로그램을 종료하는 기능도 포함했다.
stdin.readLineSync()
에서 null
이 발생하는 문제콘솔에서 사용자 입력을 받을 때 stdin.readLineSync()
가 null
을 반환하는 경우가 발생했다.
trim()
을 사용하지 않아 공백이 그대로 전달됨stdin.readLineSync()
는 null
을 반환할 가능성이 있기 때문에 ?.trim()
을 사용하지 않으면 null
오류가 발생할 수 있음var input = stdin.readLineSync()?.trim();
if (input == null || input.isEmpty) {
print('❌ 올바른 입력을 해주세요.');
continue;
}
null
또는 빈 문자열을 체크하는 예외 처리를 추가하여 해결함.
int.tryParse()
의 예외 처리 필요숫자를 입력받을 때 문자를 입력하면 프로그램이 충돌함.
int.parse()
를 사용하면 숫자가 아닌 입력이 들어올 경우 예외가 발생함.var quantity = int.tryParse(stdin.readLineSync()?.trim() ?? '');
if (quantity == null || quantity <= 0) {
print('❌ 올바른 수량을 입력하세요!');
continue;
}
int.tryParse()
를 사용하여 변환 실패 시 null
을 반환하도록 하고, 유효성 검사를 추가하여 예외를 방지함.
같은 상품을 여러 개 담을 경우 개별적으로 추가되어 장바구니가 중복된 리스트 형태로 저장됨.
Map<String, int>
형태로 변경하여 상품명과 개수를 저장하는 방식으로 해결Map<String, int> cart = {};
void addToCart(int productIndex, int quantity) {
var selectedProduct = products[productIndex - 1];
cart[selectedProduct.name] = (cart[selectedProduct.name] ?? 0) + quantity;
}
이렇게 하면 같은 상품을 담을 때 기존 수량을 증가시키는 방식으로 장바구니를 관리할 수 있음.
종료 여부를 묻는 과정에서 5를 입력하지 않아도 프로그램이 종료되는 경우가 발생함.
exitConfirm
값이 null
이거나 의도치 않은 입력값을 처리하지 않았음.stdout.write('정말 종료하시겠습니까? (종료하려면 5 입력): ');
var exitConfirm = stdin.readLineSync()?.trim();
if (exitConfirm == '5') {
print('이용해 주셔서 감사합니다 ~ 안녕히 가세요! 👋');
isRunning = false;
} else {
print('🚫 종료하지 않습니다.');
}
이제 사용자가 5를 입력해야만 프로그램이 종료되며, 다른 입력을 하면 종료되지 않도록 변경됨.
이번 Dart 쇼핑몰 콘솔 프로그램을 만들면서 다양한 입력 예외 처리와 리스트 관리 방식에 대한 고민을 많이 했다. 특히 stdin.readLineSync()
의 null
처리와 int.tryParse()
를 활용한 예외 처리는 Dart 콘솔 애플리케이션을 개발할 때 필수적인 부분이라는 점을 깨달았다. 앞으로도 유사한 프로그램을 개발할 때 더 효율적인 방법을 고민해봐야겠다!