Dart는 현대적인 객체 지향 프로그래밍 언어로, 클래스와 객체를 사용하여 코드의 재사용성과 유지보수성을 높일 수 있습니다.
이 글에서는 Dart의 클래스와 객체의 기본 개념을 초보자들도 이해할 수 있도록 쉽게 설명하고, 객체 지향 프로그래밍의 핵심 요소를 소개합니다.
1. 클래스와 객체의 기본 개념
클래스란?
클래스는 객체를 생성하기 위한 설계도 또는 청사진입니다. 클래스는 객체가 가져야 할 속성(변수)과 행동(메서드)을 정의합니다. Dart에서는 class 키워드를 사용하여 클래스를 정의합니다.
예를 들어, Person이라는 클래스를 정의할 때는 다음과 같은 형태가 됩니다.
class Person {
String name;
int age;
void greet() {
print('Hello, my name is $name and I am $age years old.');
}
}
위의 코드에서 Person 클래스는 두 개의 속성(name, age)과 하나의 메서드(greet)를 가지고 있습니다.
객체란?
객체는 클래스로부터 생성된 인스턴스입니다. 객체는 클래스에서 정의한 속성과 메서드를 가지고 있으며, 클래스를 기반으로 여러 개의 객체를 생성할 수 있습니다.
클래스를 사용하여 객체를 생성하는 방법은 다음과 같습니다.
void main() {
// Person 클래스의 인스턴스 생성
Person person1 = Person();
person1.name = 'Alice';
person1.age = 30;
// 메서드 호출
person1.greet(); // 출력: Hello, my name is Alice and I am 30 years old.
}
* 인스턴스 : Class는 변수와 다르게 인스턴스를 생성하지 않으면 메모리에 올라와 있지않으므로 찾을 수가 없습니다. 인스턴스를 통해 메모리에 올리는 작업해주어야합니다.
2. 생성자(Constructor)
생성자는 객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다. 생성자는 객체의 초기화 작업을 수행하며, 클래스 이름과 동일한 메서드로 정의합니다.
class Person {
String name;
int age;
// 생성자
Person(this.name, this.age);
void greet() {
print('Hello, my name is $name and I am $age years old.');
}
}
생성자를 사용하면 객체 생성 시 초기값을 지정할 수 있습니다.
void main() {
Person person1 = Person('Bob', 25);
person1.greet(); // 출력: Hello, my name is Bob and I am 25 years old.
}
3. 상속(Inheritance)
상속은 기존 클래스의 속성과 메서드를 새로운 클래스에서 재사용할 수 있게 해줍니다. Dart에서는 extends 키워드를 사용하여 상속을 구현합니다.
class Student extends Person {
String studentId;
Student(String name, int age, this.studentId) : super(name, age);
void study() {
print('$name is studying.');
}
}
Student 클래스는 Person 클래스를 상속받아 name, age 속성과 greet 메서드를 재사용하며, 추가로 studentId와 study 메서드를 추가합니다.
void main() {
Student student1 = Student('Charlie', 20, 'S1234');
student1.greet(); // 출력: Hello, my name is Charlie and I am 20 years old.
student1.study(); // 출력: Charlie is studying.
}
4. 캡슐화(Encapsulation)
캡슐화는 객체의 속성과 메서드를 하나의 단위로 묶고, 외부에서 접근하지 못하도록 보호하는 개념입니다. Dart에서는 접근 제어자를 사용하여 캡슐화를 구현합니다.
class Person {
String _name; // private 변수
int _age; // private 변수
Person(this._name, this._age);
String get name => _name; // getter
void set name(String name) => _name = name; // setter
void greet() {
print('Hello, my name is $_name and I am $_age years old.');
}
}
여기서 _name과 _age는 private 변수로, 외부에서는 직접 접근할 수 없고, get과 set 메서드를 통해 접근합니다.
Dart에서 객체 지향 프로그래밍의 기본 개념인 클래스와 객체는 코드의 구조를 명확하게 하고, 재사용성을 높이며, 유지보수를 쉽게 만들어 줍니다. 이 글을 통해 Dart의 클래스와 객체 개념을 이해하는 데 도움이 되었기를 바랍니다.
구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Dart > Dart Programming language' 카테고리의 다른 글
[초급] Dart 객체 지향 프로그래밍 기초: 상속 및 다형성 (0) | 2024.09.05 |
---|---|
[초급] Dart 객체 지향 프로그래밍 기초: 생성자와 소멸자 (0) | 2024.09.05 |
[초급] Dart 기본 문법/주석 작성하기: 코드의 가독성을 높이는 방법 (0) | 2024.09.02 |
[초급] Dart 기본 문법/함수 정의 및 호출하기: 기초부터 심화까지 (0) | 2024.09.02 |
[초급] Dart 기본 문법/반복문 사용하기: for, while, do-while 쉽게 이해하기 (0) | 2024.09.02 |