1. 조건문 ( if-else, switch ) 심화
✔️ if-else 문 심화
if-else를 활용하여 다양한 조건에 따른 결과 출력
void main() {
int score = 80;
if (score >= 90) {
print("A 학점");
} else if (score >= 80) {
print("B 학점");
} else if (score >= 70) {
print("C 학점");
} else {
print("F 학점");
}
}
✔️ switch 문 심화
switch문은 여러 개의 if-else를 간결하게 표현할 때 유용하다.
void main() {
String grade = "C";
switch (grade) {
case "A":
print("훌륭!");
break;
case "B":
print("좋은 성적!");
break;
case "C":
print("노력 필요!!");
break;
default:
print("공부 필요!");
}
}
2. 반복문 ( for, while, do-while )
✔️ for 문 ( List 순회 )
for 문을 활용해 리스트의 모든 요소 출력
void main() {
List<String> fruits = ["사과", "바나나", "포도"];
for (int i = 0; i < fruits.length; i++) {
print("과일: ${fruits[i]}"); // []를 문자열로 인식하기 때문에 중괄호를 통해 활용
}
}
✔️ for-in 문 ( 더 간단한 List 순회 )
for-in 문을 사용하면 더 간결하게 List 순회를 가능
void main() {
List<String> animals = ["고양이", "강아지", "토끼"];
for (var animal in animals) {
print("동물: $animal");
}
}
✔️ while 문
while 문은 조건이 참인 동안 반복
void main() {
int i = 1;
while (i <= 5) {
print("반복 횟수: $i");
i++;
}
}
✔️ do-while 문 ( 최소 1회 실행 보장 )
do-while은 조건을 나중에 검사하기 때문에 최소 한 번은 실행됨. 선실행 후 조건비교
void main() {
int i = 1;
do {
print("최소 한 번 실행: $i");
i++;
} while (i <= 3);
}
3.함수(Function) 심화
✔️ 기본 함수
void는 반환 값이 없는 함수
void sayHello() {
print("Hi!");
}
void main() {
sayHello(); // 함수 호출
}
✔️ 매개변수 있는 함수
매개변수(parameter)를 받아 사용할 수 있음.
void greet(String name) {
print("Hi, $name!");
}
void main() {
greet("Mr. Kim");
}
✔️ 반환 값이 있는 함수
return을 이용해 결과 값을 반환 가능
int add(int a, int b) {
return a + b;
}
void main() {
int result = add(3, 5);
print("결과: $result");
}
✔️ 선택적 매개변수 ( Optional Parameter )
[]를 사용하면 선택적 매개변수를 만들 수 있고, 기본값도 설정 가능
void introduce(String name, [int age = 20]) {
print("이름: $name, 나이: $age");
}
void main() {
introduce("김철수"); // 나이 생략 가능 default 20 따라서 김철수, 20 출력
introduce("이영희", 25); // default 값이 아닌 파라미터 넣은 부분으로 이영희, 25 출력
}
✔️ 화살표 함수 ( Arrow Function )
짧은 함수( 한 줄짜리 함수)는 =>를 사용해 간단하게 작성 가능
int multiply(int a, int b) => a * b;
void main() {
print(multiply(4, 5)); // 출력: 20
}
✔️ 테스트 예제 코드 1
위에서 진행했던 내용을 토대로 충분한 실습을 진행한 후, 테스트 예제를 진행해보도록 하자.
1. if-else와 switch 문을 활용해 요일에 따라 다른 메시지를 출력하는 프로그램 작성
2. 콘솔 입출력을 위해 dart:io를 import하여 요일 입력받기
3. 입력한 요일에 따라 맞는 메시지 출력
4. 월~일 이 아닌 다른 단어가 입력된 경우 잘못된 입력 처리 추가
✅ if-else 버전
import 'dart:io';
void main() {
stdout.write("요일을 입력하세요 (월, 화, 수, 목, 금, 토, 일): ");
String? day = stdin.readLineSync(); //Dart_1일차에 진행했던 stdin 사용
if (day == "월") {
print("한 주의 시작입니다! 힘내세요!");
} else if (day == "화") {
print("화이팅! 월요일을 넘겼습니다.");
} else if (day == "수") {
print("벌써 주중의 반이 지났어요!");
} else if (day == "목") {
print("주말이 다가오고 있습니다!");
} else if (day == "금") {
print("불금입니다! 조금만 더 힘내세요!");
} else if (day == "토") {
print("주말입니다! 푹 쉬세요!");
} else if (day == "일") {
print("내일은 월요일! 준비하세요!");
} else {
print("잘못된 입력입니다. 요일을 정확히 입력하세요.");
}
}
✅ switch 버전
import 'dart:io';
void main() {
stdout.write("요일을 입력하세요 (월, 화, 수, 목, 금, 토, 일): ");
String? day = stdin.readLineSync();
switch (day) {
case "월":
print("한 주의 시작입니다! 힘내세요!");
break; //break문을 활용해 조건별 실행.
case "화":
print("화이팅! 월요일을 넘겼습니다.");
break;
case "수":
print("벌써 주중의 반이 지났어요!");
break;
case "목":
print("주말이 다가오고 있습니다!");
break;
case "금":
print("불금입니다! 조금만 더 힘내세요!");
break;
case "토":
print("주말입니다! 푹 쉬세요!");
break;
case "일":
print("내일은 월요일! 준비하세요!");
break;
default:
print("잘못된 입력입니다. 요일을 정확히 입력하세요.");
}
}
✔️ 테스트 예제 코드 2
1. 1 ~ 10까지 숫자를 출력하는 프로그램 작성 ( for문 & while문 사용 )
void main() {
//for
for (int i = 1; i <= 10; i++) {
print(i);
}
//while
int j = 1;
while (j <= 10) {
print(j);
j++;
}
//do-while
int z = 1;
do {
print(z);
z++;
} while (z <= 10);
}
✔️ 테스트 예제 코드 3
1. 두 개의 숫자를 받아 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 프로그램
2. 공백일 경우 예외처리 진행 ( 올바른 숫자가 입력될 때까지 반복 )
3. 문자일 경우 예외처리 진행 ( 올바른 숫자가 입력될 때까지 반복 )
4. 덧셈, 뺄셈, 곱셈, 나눗셈을 진행하는 calculate 함수 생성, 매개변수는 2개 받음
5. 나눗셈에서 0으로 나누어 지는 경우 예외처리 진행
import 'dart:io';
void calculate(int a, int b) {
print("덧셈: $a + $b = ${a + b}");
print("뺄셈: $a - $b = ${a - b}");
print("곱셈: $a * $b = ${a * b}");
if (b != 0) {
print("나눗셈: $a / $b = ${a / b}");
} else {
print("❌ 나눗셈: 0으로 나눌 수 없습니다.");
}
}
int getNumberInput(String prompt) { //올바른 입력 함수 생성
while (true) {
stdout.write(prompt);
String? input = stdin.readLineSync();
// 공백 또는 null 체크 ( 1일차 진행 내용 )
if (input == null || input.trim().isEmpty) {
print("⚠️ 입력이 비어 있습니다. 숫자를 입력하세요.");
continue;
}
// 숫자인지 확인 ( 1일차 진행 내용 )
try {
return int.parse(input);
} catch (e) {
print("⚠️ 유효한 숫자를 입력하세요.");
}
}
}
void main() {
int num1 = getNumberInput("첫 번째 숫자를 입력하세요: ");
int num2 = getNumberInput("두 번째 숫자를 입력하세요: ");
calculate(num1, num2);
}
✔️ 테스트 예제 코드 4
0. 심화과정이므로 테스트 예제 코드 3만 진행해도 충분할것이라 생각하지만 기존에 java를 할줄 아는 사람들이라면 만들어보면 좋을 것 같다.
1. 숫자 입력이 아닌 4+2 또는 3*5와 같은 입력 처리
2. 연산자를 자동으로 감지하여 연산 수행
3. 공백 제거 및 수자로 변환 사용
4. 올바른 수식 입력하도록 예외처리
5. 지원하지 않는 연산자 예외처리
6. 0으로 나누기 방지
import 'dart:io';
void calculate(String expression) {
try {
// 입력된 수식에서 연산자 탐색
if (expression.contains("+")) {
var parts = expression.split("+");
int a = int.parse(parts[0].trim());
int b = int.parse(parts[1].trim());
print("덧셈: $a + $b = ${a + b}");
} else if (expression.contains("-")) {
var parts = expression.split("-");
int a = int.parse(parts[0].trim());
int b = int.parse(parts[1].trim());
print("뺄셈: $a - $b = ${a - b}");
} else if (expression.contains("*")) {
var parts = expression.split("*");
int a = int.parse(parts[0].trim());
int b = int.parse(parts[1].trim());
print("곱셈: $a * $b = ${a * b}");
} else if (expression.contains("/")) {
var parts = expression.split("/");
int a = int.parse(parts[0].trim());
int b = int.parse(parts[1].trim());
if (b == 0) {
print("❌ 나눗셈: 0으로 나눌 수 없습니다.");
} else {
print("나눗셈: $a / $b = ${a / b}");
}
} else {
print("⚠️ 지원하지 않는 연산자입니다. (+, -, *, / 만 사용 가능)");
}
} catch (e) {
print("⚠️ 올바른 수식을 입력하세요. 예: 4+2, 3*5, 10/2");
}
}
String getExpressionInput() {
while (true) {
stdout.write("계산할 수식을 입력하세요 (예: 4+2, 3*5, 10/2): ");
String? input = stdin.readLineSync();
// 입력이 비어 있는 경우 예외 처리
if (input == null || input.trim().isEmpty) {
print("⚠️ 입력이 비어 있습니다. 올바른 수식을 입력하세요.");
continue;
}
return input.trim(); // 입력된 값 반환
}
}
void main() {
String expression = getExpressionInput();
calculate(expression);
}
✔️ 테스트 예제 코드 5
0. 해당 부분 또한 예제 코드 4에서의 심화 과정으로 개발을 조금이라도 해봤던 사람들이 해보면 더 좋을 것 같다.
1. 테스트 예제 코드4는 "4+2+3" 이렇게 2개의 연산자가 있을 경우에는 진행이 불가능함. 해당 부분 수정
2. 연산자와 피연산자를 구분하여 계산하도록 수행.
3. Map과 List를 활용하여 진행.
import 'dart:io';
double evaluateExpression(String expression) {
try {
// 연산자와 피연산자를 분석하여 계산 수행
List<String> tokens = expression.split(RegExp(r'(\+|\-|\*|\/)')).map((e) => e.trim()).toList();
List<String> operators = RegExp(r'(\+|\-|\*|\/)').allMatches(expression).map((m) => m.group(0)!).toList();
if (tokens.length != operators.length + 1) {
throw Exception("잘못된 수식 형식입니다.");
}
// 숫자로 변환
List<double> numbers = tokens.map((e) => double.parse(e)).toList();
// 곱셈(*) 및 나눗셈(/) 먼저 처리
for (int i = 0; i < operators.length; i++) {
if (operators[i] == "*" || operators[i] == "/") {
double result;
if (operators[i] == "*") {
result = numbers[i] * numbers[i + 1];
} else {
if (numbers[i + 1] == 0) throw Exception("❌ 0으로 나눌 수 없습니다.");
result = numbers[i] / numbers[i + 1];
}
// 계산한 값 반영하고 리스트 수정
numbers[i] = result;
numbers.removeAt(i + 1);
operators.removeAt(i);
i--; // 리스트 변경에 맞춰 인덱스 조정
}
}
// 덧셈(+) 및 뺄셈(-) 처리
double total = numbers[0];
for (int i = 0; i < operators.length; i++) {
if (operators[i] == "+") {
total += numbers[i + 1];
} else if (operators[i] == "-") {
total -= numbers[i + 1];
}
}
return total;
} catch (e) {
throw Exception("⚠️ 올바른 수식을 입력하세요. 예: 4+2, 3*5-2, 10/2+3");
}
}
String getExpressionInput() {
while (true) {
stdout.write("계산할 수식을 입력하세요 (예: 4+2, 3*5-2, 10/2+3): ");
String? input = stdin.readLineSync();
if (input == null || input.trim().isEmpty) {
print("⚠️ 입력이 비어 있습니다. 올바른 수식을 입력하세요.");
continue;
}
return input.trim();
}
}
void main() {
try {
String expression = getExpressionInput();
double result = evaluateExpression(expression);
print("결과: $expression = $result");
} catch (e) {
print(e);
}
}
위의 코드는 1+2*(3+4) 이렇게 괄호가 포함되어 있는 수식은 불가능하다. 해당 부분은 스택을 통하여 진행을 하면 더 좋은 방향으로 만들 수 있게 때문에 추후에 스택을 진행할 때에 진행해보도록 할 예정이다.
이렇게 제어문과 함수 심화 과정에 대해서 알아보았다. 추가 적인 내용이 필요한 경우에는 댓글을 요청드리고, 틀린 부분이 있다면 이것 또한 댓글로 알려주시면 수정하도록 하겠습니다!
'개발 & 서버 > Dart' 카테고리의 다른 글
Dart_5일차 : 비동기 프로그래밍 (Future, async/await, Stream) (0) | 2025.02.21 |
---|---|
Dart_4일차 : 클래스(Class)와 객체(Object) 기초 (0) | 2025.02.20 |
Dart_3일차 : 컬렉션(List, Set, Map), 예외처리 (0) | 2025.02.19 |
Dart_1일차 : 기본 문법 (2) | 2025.02.16 |
Dart를 공부하게 된 이유 + Dart 특징 (1) | 2025.02.14 |