반응형
생성자와 메서드를 알아보자
- 플러터를 시작하기 전 다트(Dart) 언어의 개념에 대해 정리를 해보고자 합니다.
- 다트(Dart) 언어 개념 정리 포스팅 후 플러터(Flutter) 개념 정리로 넘어갈 예정입니다.
- 플러터(Flutter) 개념 정리 후 실습이 시작 된다고 보시면 될 것 같습니다.
소개
- Dart는 Google이 개발한 현대적이고 강력한 프로그래밍 언어입니다.
- 특히 Flutter 프레임워크와 함께 사용되어 크로스 플랫폼 애플리케이션 개발에 널리 사용되고 있습니다.
- Dart의 주요 특징 중 하나는 객체 지향 프로그래밍(OOP)을 강력하게 지원한다는 점입니다.
- 이번 포스팅에서는 Dart의 객체 지향 프로그래밍의 핵심 요소인 생성자와 메서드에 대해 자세히 알아보겠습니다.
생성자: 객체의 시작점
생성자는 클래스의 인스턴스를 생성할 때 호출되는 특별한 메서드입니다. Dart에서 생성자는 매우 유연하고 다양한 방식으로 정의할 수 있습니다.
기본 생성자
가장 간단한 형태의 생성자는 클래스 이름과 동일한 이름을 가진 메서드입니다.
class Person {
String name;
int age;
Person(this.name, this.age);
}
- 이 예제에서
Person
클래스의 기본 생성자는name
과age
매개변수를 받아 해당 속성을 초기화합니다.
명명된 생성자
Dart는 여러 생성자를 정의할 수 있도록 명명된 생성자를 지원합니다.
class Point {
double x, y;
Point(this.x, this.y);
Point.origin() {
x = 0;
y = 0;
}
}
Point.origin()
은 명명된 생성자의 예시입니다. 이를 통해 원점(0, 0)에 위치한Point
객체를 쉽게 생성할 수 있습니다.
팩토리 생성자
팩토리 생성자는 항상 새로운 인스턴스를 생성하지 않고, 경우에 따라 기존 인스턴스를 반환하거나 서브클래스의 인스턴스를 반환할 수 있습니다.
class Logger {
final String name;
static final Map<String, Logger> _cache = <String, Logger>{};
factory Logger(String name) {
return _cache.putIfAbsent(name, () => Logger._internal(name));
}
Logger._internal(this.name);
}
- 이 예제에서
Logger
클래스는 팩토리 생성자를 사용하여 동일한 이름의 로거 인스턴스를 재사용합니다.
메서드: 객체의 행동을 정의
메서드는 클래스의 행동을 정의하는 함수입니다. Dart에서는 다양한 종류의 메서드를 정의할 수 있습니다.
인스턴스 메서드
가장 일반적인 형태의 메서드로, 객체의 인스턴스에서 호출됩니다.
class Car {
String brand;
int speed = 0;
Car(this.brand);
void accelerate() {
speed += 10;
print('$brand의 속도가 증가했습니다. 현재 속도: $speed km/h');
}
}
accelerate()
메서드는Car
클래스의 인스턴스에서 호출할 수 있는 인스턴스 메서드입니다.
정적 메서드
클래스의 인스턴스가 아닌 클래스 자체에 속한 메서드입니다.
class MathUtils {
static int add(int a, int b) {
return a + b;
}
}
- 정적 메서드는 클래스의 인스턴스를 생성하지 않고도 호출할 수 있습니다:
MathUtils.add(5, 3)
.
게터와 세터
Dart에서는 게터와 세터를 사용하여 객체의 속성에 접근하고 수정할 수 있습니다.
class Rectangle {
double _width, _height;
Rectangle(this._width, this._height);
double get area => _width * _height;
set width(double value) {
if (value > 0) {
_width = value;
}
}
}
- 이 예제에서
area
는 읽기 전용 속성으로, 게터를 통해 계산됩니다.width
는 세터를 통해 유효성 검사 후 설정됩니다.
추상 메서드
추상 클래스에서 구현 없이 선언만 된 메서드입니다. 서브클래스에서 반드시 구현해야 합니다.
abstract class Shape {
double get area;
}
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double get area => 3.14 * radius * radius;
}
Shape
클래스의area
게터는 추상 메서드이며,Circle
클래스에서 구체적으로 구현됩니다.
생성자와 메서드의 고급 기능
Dart는 생성자와 메서드에 대해 몇 가지 고급 기능을 제공합니다.
초기화 리스트
생성자의 본문이 실행되기 전에 인스턴스 변수를 초기화할 수 있습니다.
class Point {
final double x;
final double y;
final double distanceFromOrigin;
Point(double x, double y)
: x = x,
y = y,
distanceFromOrigin = sqrt(x * x + y * y);
}
리다이렉팅 생성자
다른 생성자를 호출하는 생성자를 정의할 수 있습니다.
class Point {
double x, y;
Point(this.x, this.y);
Point.alongXAxis(double x) : this(x, 0);
}
연산자 오버로딩
Dart에서는 연산자를 오버로딩하여 클래스의 객체에 대해 산술 연산 등을 정의할 수 있습니다.
class Vector {
final int x, y;
Vector(this.x, this.y);
Vector operator +(Vector v) => Vector(x + v.x, y + v.y);
Vector operator -(Vector v) => Vector(x - v.x, y - v.y);
}
- 이 예제에서는 벡터의 덧셈과 뺄셈을 정의했습니다.
결론
- Dart의 생성자와 메서드는 객체 지향 프로그래밍의 핵심 요소로, 클래스의 인스턴스를 생성하고 그 행동을 정의하는 데 사용됩니다. 기본 생성자부터 팩토리 생성자, 다양한 종류의 메서드, 그리고 고급 기능들까지, Dart는 풍부하고 유연한 도구를 제공하여 개발자가 효율적이고 유지보수가 용이한 코드를 작성할 수 있도록 돕습니다.
- 이러한 기능들을 잘 활용하면, 복잡한 애플리케이션 구조를 깔끔하게 설계하고 구현할 수 있습니다. 특히 Flutter를 사용한 모바일 앱 개발에서 이러한 Dart의 특징은 큰 강점으로 작용합니다. 객체 지향 프로그래밍의 원칙을 잘 따르면서도, Dart만의 독특하고 강력한 기능들을 활용하여 효율적이고 확장 가능한 소프트웨어를 개발할 수 있습니다.
- Dart의 생성자와 메서드에 대해 깊이 이해하고 실제 프로젝트에 적용해 보면서, 여러분의 프로그래밍 스킬을 한 단계 더 발전시킬 수 있을 것입니다.
맺음말
- 이번 포스팅에서는 다트의 생성자와 메서드에 대해 알아보았습니다.
- 다음 포스팅에서는 다트의 상속과 다형성에 대해 알아보고자 합니다.
반응형
'다트(Dart) 언어 강좌' 카테고리의 다른 글
추상 클래스와 인터페이스를 알아보자 (0) | 2024.07.25 |
---|---|
상속과 다형성을 알아보자 (0) | 2024.07.25 |
객체 지향 프로그래밍의 핵심을 알아보자 (0) | 2024.07.24 |
익명 함수와 람다 표현식을 알아보자 (0) | 2024.07.24 |
함수 정의와 호출에 대해 알아보자 (0) | 2024.07.24 |