Dart 언어의 함수 사용법과 객체지향 프로그래밍의 기본 개념에 대해 알아보겠습니다.
함수란?
함수는 특정 작업을 수행하는 코드의 묶음입니다. 함수를 사용하면 코드를 재사용하고, 프로그램을 더 작고 관리하기 쉬운 부분으로 나눌 수 있습니다. 함수는 입력(매개변수)을 받아 처리하고, 결과(반환값)를 돌려줄 수 있습니다.
Dart에서 함수는 일급 객체로 취급됩니다. 이는 함수를 변수에 할당하거나, 다른 함수의 인자로 전달하거나, 함수에서 반환할 수 있다는 의미입니다. 이러한 특성은 Dart의 유연성을 크게 높여줍니다.
객체지향 프로그래밍이란?
객체지향 프로그래밍(OOP)은 프로그램을 객체들의 모음으로 구성하는 프로그래밍 패러다임입니다. 객체는 데이터(속성)와 그 데이터를 조작하는 코드(메서드)를 하나의 단위로 묶은 것입니다.
OOP의 주요 개념들은 다음과 같습니다:
- 캡슐화: 데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶는 것입니다.
- 상속: 기존 클래스의 특성을 새로운 클래스가 재사용할 수 있게 하는 메커니즘입니다.
- 다형성: 같은 이름의 메서드가 다른 클래스에서 다르게 동작할 수 있게 하는 개념입니다.
- 추상화: 복잡한 시스템을 간단한 인터페이스로 표현하는 것입니다.
Dart는 이러한 OOP 개념을 완벽하게 지원하며, 클래스를 사용하여 객체를 생성하고 관리합니다.
이제 Dart에서 함수를 어떻게 정의하고 사용하는지, 그리고 객체지향 프로그래밍의 기본 개념들을 어떻게 구현하는지 자세히 살펴보겠습니다.
1. 함수
Dart에서 함수는 일급 객체로 취급되며, 변수에 할당하거나 다른 함수의 인자로 전달할 수 있습니다.
기본 함수 구조
반환타입 함수이름(매개변수) {
// 함수 본문
return 반환값;
}
예시:
int add(int a, int b) {
return a + b;
}
화살표 함수
간단한 함수는 화살표 구문을 사용하여 한 줄로 표현할 수 있습니다:
int multiply(int a, int b) => a * b;
선택적 매개변수
매개변수를 선택적으로 만들려면 중괄호 {}를 사용합니다:
void greet(String name, {String greeting = 'Hello'}) {
print('$greeting, $name!');
}
// 사용 예
greet('Alice'); // 출력: Hello, Alice!
greet('Bob', greeting: 'Hi'); // 출력: Hi, Bob!
2. 객체지향 프로그래밍
Dart는 클래스 기반의 객체지향 프로그래밍을 지원합니다.
클래스 정의
class Person {
String name;
int age;
Person(this.name, this.age);
void introduce() {
print('My name is $name and I am $age years old.');
}
}
객체 생성 및 사용
var person = Person('Alice', 30);
person.introduce(); // 출력: My name is Alice and I am 30 years old.
상속
Dart에서는 extends
키워드를 사용하여 상속을 구현합니다:
class Student extends Person {
String school;
Student(String name, int age, this.school) : super(name, age);
@override
void introduce() {
super.introduce();
print('I study at $school.');
}
}
인터페이스
Dart에는 별도의 interface
키워드가 없습니다. 대신, 모든 클래스가 암시적으로 인터페이스 역할을 합니다:
class Flyable {
void fly() {
print('Flying');
}
}
class Bird implements Flyable {
@override
void fly() {
print('Bird is flying');
}
}
Mixin
Mixin은 클래스 코드를 재사용하는 방법을 제공합니다:
mixin Musical {
void playInstrument() {
print('Playing an instrument');
}
}
class Musician extends Person with Musical {
Musician(String name, int age) : super(name, age);
}
마무리
이번 포스팅에서는 Dart의 함수와 객체지향 프로그래밍의 기초에 대해 알아보았습니다. 다음 포스팅에서는 Dart의 고급 기능인 비동기 프로그래밍과 제네릭에 대해 다루겠습니다.
Dart 언어에 대해 더 궁금한 점이 있다면 댓글로 남겨주세요!
관련 리소스
더 자세한 정보를 원하시면 아래의 공식 홈페이지를 참조하세요:
- Dart 공식 홈페이지: https://dart.dev/
- Flutter 공식 홈페이지: https://flutter.dev/