본문 바로가기
IT/Program Language

[Dart] 함수와 클래스

by Leos 2023. 7. 17.

Dart Logo

 

1. 함수 (Function) 설명과 특징
2. 클래스 (Class) 설명과 특징

 

1. 함수 (Function) 설명과 특징

  • 함수는 코드의 재사용성을 높이기 위해 사용되며, 특정 작업을 수행하는 일련의 코드 블록입니다.
  • Dart에서 함수는 반환 타입, 함수 이름, 매개변수 목록, 함수 본문으로 구성됩니다.
  • 일급 함수(First-class Functions): 
    Dart에서는 함수가 일급 객체로 취급됩니다. 
    따라서 함수를 변수에 할당하거나 다른 함수의 인자로 전달하거나 반환값으로 사용할 수 있습니다.
  • 익명 함수와 람다 표현식:
    Dart에서는 익명 함수와 람다 표현식을 지원하여 함수를 간단하게 작성할 수 있습니다.
  • 선택적 매개변수:
    Dart에서는 함수의 매개변수를 필수적으로 지정하지 않고 선택적으로 지정할 수 있습니다.
    선택적 위치 매개변수와 선택적 명명 매개변수가 있습니다.
  • 클로저(Closures):
    Dart에서는 클로저를 지원하여 함수 내에서 외부 변수에 접근할 수 있도록 합니다.
// 반환 타입이 int인 addNumbers 함수
int addNumbers(int a, int b) {
  return a + b;
}

// 반환 타입이 void인 printMessage 함수
void printMessage(String message) {
  print(message);
}

// 매개변수가 없는 함수
void greet() {
  print('Hello, Dart!');
}

// 함수 호출
int result = addNumbers(3, 4);
printMessage('Welcome!');
greet();

// 일급 함수
void higherOrderFunction(Function func) {
  func();
}

// 익명 함수와 람다 표현식
void printMessage(String message) {
  Function printer = () {
    print(message);
  };
  printer();
}

// 선택적 매개변수
void greet(String name, [String? greeting]) {
  if (greeting != null) {
    print('$greeting, $name!');
  } else {
    print('Hello, $name!');
  }
}

// 클로저
Function counter() {
  int count = 0;
  return () {
    count++;
    print(count);
  };
}

 

 

2. 클래스 (Class) 설명과 특징

  • 클래스는 객체 지향 프로그래밍의 기본 요소로, 속성과 메서드를 포함하는 구조입니다. 객체를 생성하기 위한 템플릿이라고 생각 할 수 있습니다.
  • Dart 에서 클래스는 멤버 변수(속성)와 멤버 함수(메서드)로 구성됩니다.
  • 객체 지향 프로그래밍:
    Dart는 객체 지향 프로그래밍을 지원하며, 클래스와 객체를 통해 데이터와 기능을 캡슐화할 수 있습니다.
  • 상속과 다형성:
    Dart에서는 클래스 간의 상속을 지원하고, 다형성을 통해 부모 클래스의 메서드를 자식 클래스에서 재정의할 수 있습니다.
  • 생성자:
    Dart에서는 생성자를 통해 객체를 초기화할 수 있으며, 기본 생성자 외에도 명명된 생성자와 팩토리 생성자 등 다양한 생성자를 제공합니다.
  • Getter와 Setter:
    클래스 내에서 속성에 접근하기 위한 Getter와 Setter를 정의할 수 있습니다.
// Person 클래스 정의
class Person {
  String name;
  int age;

  // 생성자
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  // 메서드
  void introduce() {
    print('My name is $name, and I am $age years old.');
  }
}

// Person 객체 생성
Person person = Person('John', 30);
person.introduce();

// 객체 지향 프로그래밍
class Person {
  String name;
  int age;

  Person(this.name, this.age);

  void introduce() {
    print('My name is $name, and I am $age years old.');
  }
}

// 상속과 다형성
class Student extends Person {
  String major;

  Student(String name, int age, this.major) : super(name, age);

  @override
  void introduce() {
    print('I am a student majoring in $major.');
  }
}

// 생성자와 명명된 생성자
class Rectangle {
  double width;
  double height;

  Rectangle(this.width, this.height);

  Rectangle.square(double side) : this(side, side);
}

// Getter와 Setter
class Circle {
  double _radius;

  double get radius => _radius;
  set radius(double value) {
    if (value >= 0) {
      _radius = value;
    }
  }
}

 

위의 코드에서는 함수와 클래스에 대한 설명과 함께 각각의 개념과 사용법에 대한 샘플 코드를 제공하였습니다. 

함수는 코드 블록을 재사용하고, 클래스는 속성과 메서드를 통해 객체를 정의하고 사용할 수 있는 기능을 제공합니다. 

이를 참고하여 Dart 프로그램을 작성하고, 함수와 클래스를 효과적으로 활용할 수 있습니다.

Dart의 함수와 클래스는 다양한 특징을 갖고 있으며, 기존의 객체 지향 프로그래밍 개념과 함께 일급 함수, 클로저, 선택적 매개변수 등의 기능을 제공합니다. 

이러한 특징과 문법을 활용하여 Dart 언어의 함수와 클래스를 유연하게 사용할 수 있습니다.