Today I Learned (250624) 1-4.
반복문
- 어떤 코드를 여러 번 반복해서 실행하기 위해 씀
- 같은 코드를 반복해서 써도 되지만 효율적으로 코드를 짜기 위해 반복문 사용
반복문의 종류
1. for
- 반복할 특정 작업의 반복 횟수가 명확할 때 사용
- 조건식이 참이면 증감식 실행하고, for문의 코드 블록 실행
- 조건식이 거짓이면 for문을 빠져나옴
// for (초기화식; 조건식; 증감식) {...}
String message = 'Dart 공부';
for (var i = 0; i < 5; i++) {
message += '!';
}
print(message); // Dart 공부!!!!!
ㄴ for 오른쪽 옆에 있는 i에는 for문의 코드 블록이 1번 실행될 때마다 0부터 4까지의 정수가 차례대로 대입
- for문 특징
1) 초기화식에 있는 변수는 코드 블록 안에서 사용 가능
for (int i = 1; i <= 5; i++) {
print('$i !');
}
/*
1 !
2 !
3 !
4 !
5 !
*/
2) 초기화식에 있는 변수를 상수로는 선언할 수 없음
- 초기화식에 있는 변수가 조건식과 증감식을 거치면서 값이 바뀌어야 하는데 상수로 설정하면 값이 바뀔 수 없음
for (final i = 1; i <= 5; i++) {
print('$i !'); // Error: Can't assign to the final variable 'i'.
}
// 해결방법
for (int i = 1; i <= 5; i++) {
print('$i !');
} // int i = 1 -> i는 변경 가능한 변수로 i++도 문제없이 작동
Q. final은 상수가 아닌데 왜 for 문 안에서 선언이 안되지?
final의 의미
- final 변수는 값을 딱 한 번만 할당 가능,
즉, final i = 1이면 i는 변경할 수 없음
문제는 i++은 값을 바꾸는 행위로 i = i + 1과 같은 의미, i에 값을 다시 할당하는 것
그런데 final i는 처음 값을 정하고 나면 바꿀 수 없기 때문에 i++ 연산은 불가능 -> 에러
- const는 컴파일 타임 상수이기 때문에 변수 자체로 사용조차 안됨
2. while
- while 문의 코드 블록을 실행하기 전에 먼저 while 문의 조건식을 검사
ㄴ 그 조건식이 참이면 while 문의 코드 블록을 실행하고, 거짓이면 while 문을 빠져나옴
// while (조건식) {...}
int count = 1;
while (count <= 5) {
print('count : $count');
count += 1;
}
/*
count : 1
count : 2
count : 3
count : 4
count : 5
*/
3. do-while
- do 문의 코드 블록을 일단 실행함 (이때 while 문의 조건식이 참인지 거짓인지는 중요하지 않음)
- 그리고 나서 while 문의 조건식이 참이면 do 문에 묶인 코드 블록을 다시 실행하고,
조건식이 거짓이면 do 문을 빠져나옴
// do {...} while (조건식);
int count = 1;
do {
print('count : $count');
count += 1;
} while (count <= 5);
/*
count : 1
count : 2
count : 3
count : 4
count : 5
*/
int count = 6;
do {
print('count : $count'); // count : 6
count += 1;
} while (count <= 5);
// count가 6이기 때문에 while 문의 조건식에 맞지 않아서 do 문의 코드 블록이 최초 1회만 실행
4. for-in
- for문만 있는 형태의 초기화식에 있는 변수를 사용하지 않으면서 Collection (ex. List, Set, Map)의 요소를 순회할 때 사용
- in의 오른쪽에 있는 콜렉션 데이터의 요소가 for 문을 돌면서 하나씩 in의 왼쪽에 있는 변수에 대입
- in이 포함된 for 문의 오른쪽 옆에 있는 변수는 for문의 코드 블록이 1번 실행되는 동안 값이 바뀌지 않기 때문에 상수로 선언해도 됨
// for (순회식) {...}
// for (var 변수 in 리스트 { //반복할 코드 }
// ㄴ 리스트 안의 값들을 하나씩 변수에 담아가면서 반복하라는 뜻 (변수에는 리스트 안의 요소가 순서대로 하나씩 담김)
List<String> fruits = ['사과', '바나나', '귤'];
for (var fruit in fruits) {
print(fruit);
}
/*
사과
바나나
귤
*/
ㄴ 작동 순서
1) 리스트 fruits에 3개의 문자열이 있음: '사과', '바나나', '귤'
2) for (var fruit in fruits):
첫 번째 반복: fruit에 '사과'가 들어가고 print(fruit) 실행 -> 사과
두 번째 반복: fruit에 '바나나'가 들어감 -> 바나나
세 번째 반복: fruit에 '귤'이 들어감 -> 귤
3) 반복 끝
- for 문과 비교시, for-in 문은 인덱스 필요 없이 리스트 안의 요소만 간단히 꺼내서 쓸 수 있음
(읽기 쉽고, 실수도 줄일 수 있음)
반복문에서 자주 등장하는 키워드 2가지
1. break
- 반복문이 실행되고 있던 중에 이제 그만 실행했으면 할 때 사용
int count = 1;
while (count <= 6) {
count += 1;
if (count == 5) {
print('count = $count'); // count = 5
break;
}
}
// break가 없으면 while문의 코드 블록이 계속 실행돼서 print문이 실행되지 않아요.
2. continue
- 반복문 실행 중에 특정 조건인 경우에는 건너뛰고 싶을 때 사용 (이번 반복을 건너뛰고 다음 반복으로 넘어감)
final fruits = ['사과', '파인애플', '오렌지', '귤', '복숭아'];
for (final fruit in fruits) {
if (fruit == '파인애플') {
continue;
}
print('맛있는 $fruit');
}
/*
맛있는 사과
맛있는 오렌지
맛있는 귤
맛있는 복숭아
*/
// 파인애플은 출력하지 않고 넘어감
'춘기IT > 춘기개발' 카테고리의 다른 글
Dart 기초 과제 - 콘솔 쇼핑몰 - 수정(제출) (1) | 2025.06.26 |
---|---|
Dart 기초 과제 - 콘솔 쇼핑몰 (0) | 2025.06.25 |
Dart 기본 문법(2) - 조건문 (if / else if / else / switch / 조건표현식) (0) | 2025.06.24 |
Dart 기본 문법(1) - 변수와 데이터 타입 / 연산자(Operators) (2) | 2025.06.24 |
Dart 사전 용어 정리 학습 (1) | 2025.06.23 |