Dart에서 함수와 클래스는 객체 지향 프로그래밍을 구현하는 중요한 요소입니다. 아래에서 Dart에서 함수와 클래스를 어떻게 정의하고 사용하는지에 대해 자세히 설명하겠습니다.
함수 (Functions)
Dart에서 함수는 기본적으로 다음과 같이 정의됩니다:
// 반환 타입이 명시된 함수
int add(int a, int b) {
return a + b;
}
// 반환 타입이 void인 함수
void printMessage(String message) {
print(message);
}
// 매개변수가 옵셔널인 함수 (기본값을 설정할 수 있음)
void greet(String name, {String greeting = 'Hello'}) {
print('$greeting, $name!');
}
// 위치 매개변수와 이름 매개변수를 혼용한 함수
void describePerson(String name, int age, {String gender = 'Unknown'}) {
print('$name is $age years old and identifies as $gender.');
}
void main() {
// 함수 호출
int sum = add(3, 5);
print('Sum: $sum');
printMessage('Hello, Dart!');
greet('Alice');
describePerson('Bob', 25, gender: 'Male');
}
- 기본 함수:
add
함수는 두 개의 정수를 받아들여 그들의 합을 반환합니다. - void 함수:
printMessage
함수는 반환 값이 없으며, 주어진 메시지를 출력합니다. - 옵셔널 매개변수:
greet
함수는 이름과 선택적으로 인사말을 인자로 받습니다. - 이름 매개변수:
describePerson
함수는 위치 매개변수와 이름 매개변수를 혼용하여 사람의 정보를 설명합니다.
클래스 (Classes)
Dart에서 클래스를 정의하고 사용하는 방법은 다음과 같습니다:
// Person 클래스 정의
class Person {
// 필드 (멤버 변수)
String name;
int age;
// 생성자
Person(this.name, this.age);
// 메서드
void sayHello() {
print('Hello, my name is $name and I am $age years old.');
}
}
void main() {
// 클래스 인스턴스 생성
var person1 = Person('Alice', 30);
var person2 = Person('Bob', 25);
// 메서드 호출
person1.sayHello();
person2.sayHello();
}
- 클래스 정의:
Person
클래스는name
과age
라는 필드를 가지며, 생성자를 통해 초기화합니다. - 생성자:
Person
클래스는this.name
및this.age
를 통해 생성자를 정의하여 초기화합니다. - 메서드:
sayHello
메서드는 해당 객체의 속성을 사용하여 인사말을 출력합니다.
상속과 다형성
Dart에서는 상속을 통해 클래스의 재사용성을 높일 수 있고, 다형성을 통해 동일한 인터페이스를 가진 여러 클래스를 처리할 수 있습니다.
// 상속 예제
class Employee extends Person {
String position;
Employee(String name, int age, this.position) : super(name, age);
@override
void sayHello() {
print('Hello, my name is $name, I am $age years old, and I work as a $position.');
}
}
void main() {
var employee = Employee('Carol', 35, 'Manager');
employee.sayHello(); // Employee 클래스의 sayHello 메서드 호출
}
- 상속:
Employee
클래스는Person
클래스를 확장하여position
필드를 추가하고,super
키워드를 통해 부모 클래스의 생성자를 호출합니다. - 다형성:
Employee
클래스의sayHello
메서드가Person
클래스의 메서드를 재정의하고 있습니다. 이는 다형성의 예입니다.
Dart에서 함수와 클래스는 강력한 객체 지향 프로그래밍의 기본 요소들을 제공하며, 이를 통해 코드의 재사용성을 높이고 유지보수를 용이하게 할 수 있습니다.