1. 리스트 ( List )
Dart에서 List는 배열과 비슷한 개념으로 순서가 있는 데이터 모음이다.
✔️ 리스트 생성 및 사용
리스트는 add()로 요소를 추가하고, remove()로 삭제할 수 있음.
void main() {
List<String> fruits = ["사과", "바나나", "포도"];
print(fruits); // 전체 리스트 출력
print(fruits[0]); // 첫 번째 요소 출력 (사과)
fruits.add("오렌지"); // 요소 추가
print(fruits); // ["사과", "바나나", "포도", "오렌지"]
fruits.remove("바나나"); // 특정 요소 삭제
print(fruits); // ["사과", "포도", "오렌지"]
print(fruits.length); // 리스트 길이 출력
}
✔️ 리스트 반복문 활용
for, for-in, forEach 등 다양한 반복 방식 지원
void main() {
List<int> numbers = [1, 2, 3, 4, 5];
for (int i = 0; i < numbers.length; i++) {
print("for문: ${numbers[i]}");
}
for (var num in numbers) {
print("for-in문: $num");
}
numbers.forEach((num) => print("forEach: $num"));
}
2. 집합 ( Set )
Set은 중복을 허용하지 않는 컬렉션.
✔️ Set 생성 및 사용
Set은 중복이 자동으로 제거됨.
void main() {
Set<String> uniqueFruits = {"사과", "바나나", "포도", "사과"};
print(uniqueFruits); // {"사과", "바나나", "포도"} (중복 제거됨)
uniqueFruits.add("오렌지");
print(uniqueFruits);
uniqueFruits.remove("바나나");
print(uniqueFruits);
}
3. 맵 ( Map )
Map은 Key-Value(키-값) 쌍으로 데이터를 저장하는 자료구조
✔️ Map 생성 및 사용
Map은 딕셔너리 같은 개념, userAges["Kim"]로 값 접근
void main() {
Map<String, int> userAges = {
"Kim": 95,
"Lee": 88,
"Park": 78
};
print(userAges["Kim"]); // 95 (Key로 Value 접근)
userAges["Jung"] = 82; // 새로운 Key-Value 추가
print(userAges);
userAges.remove("Lee"); // 특정 Key 삭제
print(userAges);
print(userAges.keys); // 모든 Key 출력
print(userAges.values); // 모든 Value 출력
}
4. 예외 처리 ( try-catch )
Dart에서는 예외(Exception)를 처리하여 프로그램이 오류로 중단되지 않도록 해야 한다.
✔️ 기본 예외 처리
~/ 연산자는 정수 나눗셈, 10 ~/ 0은 예외 발생 → catch로 처리
void main() {
try {
int result = 10 ~/ 0; // 0으로 나누기 (예외 발생)
print(result);
} catch (e) {
print("예외 발생: $e");
}
}
✔️ on & finally 사용
on을 사용하면 특정 예외만 처리 가능
finally는 예외 발생 여부와 상관없이 실행됨
void main() {
try {
List<int> numbers = [1, 2, 3];
print(numbers[5]); // Index Error 발생
} on RangeError {
print("⚠️ 리스트 범위를 벗어났습니다.");
} catch (e) {
print("예외 발생: $e");
} finally {
print("예외 발생 여부와 상관없이 실행됨.");
}
}
✔️ 테스트 예제 코드 1
위에서 진행했던 내용을 토대로 충분한 실습을 진행한 후, 테스트 예제를 진행해보도록 하자.
1. 리스트(List)를 활용하여 5개의 숫자를 입력받고, 최대값과 최소값을 만드는 프로그램 만들기
2. 리스트 초기화 선언을 진행
3. 숫자인지, 공백인지 체크하는 예외처리 구문 생성
4. 제대로된 숫자 5개가 입력될때까지 숫자 입력 계속 받기
import 'dart:io';
void maxmin(List<int> numbers) {
int max = numbers[0]; // 첫 번째 값을 최대값으로 초기화
int min = numbers[0]; // 첫 번째 값을 최소값으로 초기화
for (var num in numbers) {
if (num > max) {
max = num;
}
if (num < min) {
min = num;
}
}
print("최대: $max, 최소: $min");
}
int getNumberInput(String prompt) {
while (true) {
stdout.write(prompt);
String? input = stdin.readLineSync();
if (input == null || input.trim().isEmpty) {
print("⚠️ 입력이 비어 있습니다. 숫자를 입력하세요.");
continue;
}
try {
return int.parse(input);
} catch (e) {
print("⚠️ 유효한 숫자를 입력하세요.");
}
}
}
void main() {
List<int> numbers = [];
while (numbers.length < 5) {
numbers.add(getNumberInput("숫자를 입력하세요: "));
}
maxmin(numbers);
}
✔️ 테스트 예제 코드 2
1. 집합(Set)을 활용하여 중복 제거 기능이 있는 단어 저장 프로그램 만들기
2. "apple"을 2번 입력해도 1개만 저장됨.
3. "q" 를 입력시 입력 종류 후 결과 출력
4. 사용자에게 단어 입력을 받음.
5. 공백 입력 방지( trim() 활용 )
import 'dart:io';
String getWordInput(String prompt) {
while (true) {
stdout.write(prompt);
String? input = stdin.readLineSync();
if (input == null || input.trim().isEmpty) {
print("⚠️ 입력이 비어 있습니다. 단어를 입력하세요.");
continue;
}
return input.trim(); // 공백 제거 후 반환
}
}
void main() {
Set<String> words = {};
while (true) {
String word = getWordInput("단어를 입력하세요 (종료: q): ");
if (word == "q") {
break;
}
words.add(word); // 중복일경우 자동 제거
print("현재 저장된 단어 목록: $words");
}
print("📌 최종 저장된 단어 목록: $words");
}
✔️ 테스트 예제 코드 3
1. 맵을 활용하여 사용자 이름과 나이를 저장하고 특정 사용자의 나이를 검색하는 프로그램
2. 사용자 이름과 나이를 받아 Map에 저장
3. 사용자가 "q"를 입력하면 입력 종료
4. 특정 사용자의 이름을 입력하면 나이를 출력
5. 존재하지 않는 이름을 입력하면 "사용자를 찾을 수 없습니다." 출력
6. 나이 입력시 음수, 문자 입력 방지 / 공백 및 유효한 이름 입력 처리
import 'dart:io';
Map<String, int> userAges = {}; // 사용자 정보를 저장할 Map
// 올바른 숫자 입력 받는 함수
int getAgeInput(String prompt) {
while (true) {
stdout.write(prompt);
String? input = stdin.readLineSync();
if (input == null || input.trim().isEmpty) {
print("⚠️ 입력이 비어 있습니다. 나이를 입력하세요.");
continue;
}
try {
int age = int.parse(input);
if (age <= 0) {
print("⚠️ 유효한 나이를 입력하세요.");
continue;
}
return age;
} catch (e) {
print("⚠️ 숫자로 된 나이를 입력하세요.");
}
}
}
// 사용자 이름 입력 받는 함수
String getNameInput(String prompt) {
while (true) {
stdout.write(prompt);
String? input = stdin.readLineSync()?.trim();
if (input == null || input.isEmpty) {
print("⚠️ 입력이 비어 있습니다. 이름을 입력하세요.");
continue;
}
return input;
}
}
void main() {
print("📝 사용자 정보 입력 (이름과 나이를 입력하세요, 종료: q)");
while (true) {
String name = getNameInput("사용자 이름 입력 (종료: q): ");
if (name == "q") break;
int age = getAgeInput("$name의 나이를 입력하세요: ");
userAges[name] = age; // Map에 저장
}
print("✅ 사용자 정보 입력 완료!");
// 사용자 검색 기능
while (true) {
String searchName = getNameInput("🔍 나이를 조회할 사용자 이름 입력 (종료: q): ");
if (searchName == "q") break;
if (userAges.containsKey(searchName)) {
print("📌 ${searchName}의 나이는 ${userAges[searchName]}세 입니다.");
} else {
print("⚠️ 사용자를 찾을 수 없습니다.");
}
}
print("📌 프로그램을 종료합니다.");
}
이렇게 컬렉션과 예외처리 부분에 대해서 알아보았다. 추가 적인 내용이 필요한 경우에는 댓글을 요청드리고, 틀린 부분이 있다면 이것 또한 댓글로 알려주시면 수정하도록 하겠습니다!
'IT > Dart' 카테고리의 다른 글
Dart_5일차 : 비동기 프로그래밍 (Future, async/await, Stream) (0) | 2025.02.21 |
---|---|
Dart_4일차 : 클래스(Class)와 객체(Object) 기초 (0) | 2025.02.20 |
Dart_2일차 : 제어문과 함수 심화 학습 (1) | 2025.02.17 |
Dart_1일차 : 기본 문법 (2) | 2025.02.16 |
Dart를 공부하게 된 이유 + Dart 특징 (1) | 2025.02.14 |