Dart 기본 문법 04

GreenBean·2023년 4월 3일
0
post-thumbnail

Dart

Dart 공식문서
다트 ( Dart ) 제어 흐름
다트 ( Dart ) 클래스

Dart 의 제어 흐름

  • 다트는 익숙한 형태의 기본적인 조건문과 반복문을 모두 지원
    • assert문 이 다소 생소할 수 있으나 이 역시 C 나 Java 에서 이미 제공하고 있는 기능

조건문

  • 종류는 다음과 같음
    • if
    • if ~ else
    • switch
    • assert

if & if ~ else

# if

// if (조건) {
//   실행문;
// }

if (a==1) {
  print("a is 1");
}
# if ~ else

// if (조건) {
//   실행문;
// } else {
//   실행문;
// }

if (a==1) {
  print("a is 1");
} else {
  print("a is not 1");
}
  • 기본 형태와 사용 예제는 위 코드와 같음
    • if 의 조건이 참이면 {} 내부를 실행
    • 만약 if ~ else 문이라면 if 의 조건이 거짓이면 else{} 내부를 실행

switch

# switch

// switch (변수) {
//   case 값1;
//     실행문;
//     break;
//   case 값2;
//     실행문;
//     break;
//   default;
//     실행문;
// }

var number = 1;

switch (number) {
  case 1:
    print("number is 1");
    break;
  case 2:
    print("number is 2");
    break;
  default:
    print("number is not 1 or 2");
}
  • 기본 형태와 사용 예제는 위 코드와 같음
    • switch() 에 전달된 값이 case 값에 일치하면 해당 case 내부를 실행
      • break 가 없으면 이어서 다음 case 까지 실행하게 되기 때문에 case 구분이 필요할 때는 반드시 break 를 선언
    • 모든 case 에 만족하지 않으면 default 내부를 실행

assert

# assert

// assert (조건식);

assert (a > 0);
  • assert 는 조건식이 거짓이면 에러가 발생
    • assertdebug mode 에서만 동작

조건문 기본 예시

# 예시

main() {
  int a = 10;
  int b = 20;
  
  if (a < b) {
    print("$a < $b");
  } else {
    print("$a >= $b");
  }
  
  // assert (a > b);
  
  var port = [22, 25, 53];
  switch (port[0]) {
    case 22:
      print("SSH: 22");
      break;
    case 25:
      print("SMTP: 25");
      break;
    case 53:
      print("DNS: 53");
      break;
  }
}

------------------------------------------------------------------------------------------

# 결과


10 < 20
SSH: 22

반복문

  • 종류는 다음과 같음
    • for
    • while
    • do ~ while

for

# for

// for (초기화; 조건식; 증감식) {
//   실행문;
// }

for (int i = 1; i < 5; 1++) {
  print("i = $i");
}
  • for 는 반복문의 가장 기본
    • 반복 횟수를 지정해주기 쉽고 증감식을 통해서 리스트 형태의 데이터에 좀 더 유연하게 접근할 수 있음
      • 조건식은 보통 초기화해준 인덱스의 범위를 지정해주는데 사용함
      • 증감식은 인덱스의 값을 증가 또는 감소할 수 있음
        • 예시: i += 2 를 통해 2씩 증가도 가능

while

# while

// while (조건식) {
//   실행문;
// }

int a = 0;
while (a < 5) {
  print("Hello");
  a++;
}
  • while 은 조건식이 참이면 내부를 순환하는 구조
    • 조건식이 거짓일 때까지 반복
      • switch 처럼 break 를 지원하기 때문에 특정 조건에서 멈추고 싶다면 break 를 사용하면 됨
      • 혹은 특정 조건에서 더 이상 다음 내용을 실행하지 않고 다시 반복하려면 continue 를 사용하면 됨
    • 무한 반복하려면 조건식에서 true 를 사용하면 됨

do ~ while

# do ~ while

// do {
//   실행문;
// } while (조건식);

int a = 0;
do {
  print("hello");
} while (a > 0);
  • do ~ while 에서는 while 과 딱 하나의 차이 존재
    • while 은 조건식을 확인하고 참일 때 실행하기 때문에 처음 조건식 확인 시 거짓이면 한 번의 실행도 없이 종료
    • 하지만 do ~ while 은 일단 한 번 실행함 ( do )
      • 그 후에 while 의 조건식을 보고 참이면 다시 반복하고 거짓이면 종료

반복문 기본 예시

# 예시

main() {
  var numbers = {};
  for (int i = 0; i < 5; i++) {
    numbers[i] = i;
    print("[for] numbers[$i] = ${numbers[i]}");
  }
  print("");
  
  int i = 0;
  while (i < 5) {
    print("[while] numbers[$i] = ${numbers[i]}");
    i++;
  }
  print("");
  
  i = 0;
  do {
    print("[do-while] numbers[$i] = ${numbers[i]}");
  } while(i < 5);
}

Dart 의 클래스

  • 객체 지향 프로그래밍을 공부하다 클래스를 만나면 연관되어 배워야 할 것들이 많음
    • 예를 들어 객체 ∙ 멤버 ∙ 인스턴스 ∙ 생성자 ∙ 상속 ∙ 접근 지정자 ∙ 추상 클래스 등
  • 다트는 모든 것이 객체인 완전 객체 지향 언어
    • 모든 객체는 클래스의 인스턴스
    • 그리고 모든 클래스는 Object 클래스의 자식

객체 ∙ 멤버 ∙ 인스턴스

  • 클래스는 멤버를 가짐
    • 멤버는 멤버 함수 ( 메서드 ) 와 멤버 변수 ( 인스턴스 변수 ) 로 구성됨
  • 클래스를 사용하려면 객체를 생성해야 함
    • 객체를 생성한다는 것은 클래스가 메모리에 올라간다는 의미이고 이것을 인스턴스화라고 부름
    • 이렇게 메모리에 클래스가 할당되어 인스턴스가 된 것을 객체라고 함

Tip! 참고

  • 클래스 외부 에서 하나의 기능을 하는 함수는 Function 이고 클래스 내부 에 있는 멤버 함수는 Method 라고 함
  • 또한 멤버 변수는 객체가 생성되면 인스턴스 변수라고 함

클래스 기본

# class

// class 클래스명 {
//   멤버 변수
//   멤버 함수
// }

class Person {
  String name;
  getName() {
    return name;
  }
}
  • 클래스를 사용하기 위해서는 객체를 생성해야 함
    • C++ 이나 Java 에서는 객체 생성 시 new 키워드를 사용
    • 하지만 플러터는 기본적으로 생략
      • 사용하고 싶으면 사용할 수 있음
# 예시

class Person {
  late String name;
  late int age;
  
  getName() {
    return name;
  }
}

main() {
  var student = new Person();
  var teacher = Person();
  student.name = "Kim";
  teacher.name = "Park";
  print("student name = ${student.getName()}");
  print("teacher name = ${teacher.getName()}");
}

------------------------------------------------------------------------------------------

# 결과

student name = Kim
teacher name = Park
  • 위 코드를 보면 Person 객체를 2개 만들고 있음
    • 이때 student, teacher 와 같은 변수를 참조형 변수라고 함
    • Line 12 를 보면 teacher 는 객체 생성 시 new 키워드를 사용하지 않음
  • 각 객체의 멤버에 접근하는 방법은 (참조형 변수.멤버)
    • 실제 사용법을 보면 Line 13 에서 Person 객체의 멤버 변수인 name 에 값을 할당하기 위해서 student.name = "Kim" 이라고 선언한 것을 볼 수 있음
      • 메서드에 접근하는 방법도 동일
# 예시

class Person {
  late String name;
  late int age;
  
  getName() {
    return name;
  }
}

main() {
  var student = new Person();
  var teacher = Person();
  Person person = Person();
  
  student.name = "Kim";
  teacher.name = "Park";
  person.name = "Unknown";
  
  print("student name = ${student.getName()}");
  print("teacher name = ${teacher.getName()}");
  print("person name = ${person.getName()}");
}

------------------------------------------------------------------------------------------

# 결과

student name = Kim
teacher name = Park
person name = Unknown
  • Person 클래스와 같이 개발자가 추가한 클래스도 하나의 커스텀 타입이라고 할 수 있음
    • var 대신에 Person 을 사용하면 Person 타입으로 지정됨
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글