๊ฐ์ฒด์งํฅ
1.
ํด๋์ค
2.
๊ฐ์ฒด
3.
์์ฑ์
4.
์์
5.
์ถ์ ํด๋์ค
6.
๋ฏน์ค์ธ
7.
enum
8.
static
ํด๋์ค
๊ฐ์ฒด ์ ์ํ๋ ์ค๊ณ๋
Dart์์ ํด๋์ค๋ ๊ฐ์ฒด์ ๊ตฌ์กฐ์ ํ๋์ ์ ์ํ๋ ์ฒญ์ฌ์ง์
๋๋ค. ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ์์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค:
โข
๋ฉค๋ฒ ๋ณ์ (์์ฑ/ํ๋): ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ณ์
โข
์์ฑ์: ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ํน๋ณํ ๋ฉ์๋
โข
๋ฉ์๋: ๊ฐ์ฒด๊ฐ ์ํํ ์ ์๋ ๋์์ ์ ์ํ๋ ํจ์
ํด๋์ค๋ฅผ ํตํด ์ฝ๋๋ฅผ ๊ตฌ์กฐํํ๊ณ , ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋
์ธ ์บก์ํ, ์์, ๋คํ์ฑ์ ๊ตฌํํ ์ ์์ต๋๋ค.
// Person ํด๋์ค ์ ์
class Person {
// ๋ฉค๋ฒ ๋ณ์ (์์ฑ)
String name;
int age;
// ์์ฑ์
Person(this.name, this.age);
// ๋ฉค๋ฒ ๋ฉ์๋
void introduceYourself() {
print('Hello, my name is $name and I am $age years old.');
}
}
void main() {
// Person ํด๋์ค์ ์ธ์คํด์ค ์์ฑ
var person1 = Person('Alice', 25);
// ์ธ์คํด์ค์ ์์ฑ์ ์ ๊ทผ
print('Name: ${person1.name}, Age: ${person1.age}');
// ์ธ์คํด์ค์ ๋ฉ์๋ ํธ์ถ
person1.introduceYourself(); // ์ถ๋ ฅ: Hello, my name is Alice and I am 25 years old.
// ๋ ๋ค๋ฅธ ์ธ์คํด์ค ์์ฑ
var person2 = Person('Bob', 30);
person2.introduceYourself(); // ์ถ๋ ฅ: Hello, my name is Bob and I am 30 years old.
}
Dart
๋ณต์ฌ
๊ฐ์ฒด
์ค์ธ๊ณ์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์, ํ๋ก๊ทธ๋จ์ ๋ณ์์ ๋ฉ์๋๋ก ์ถ์ํํ ๊ฒ
๊ฐ์ฒด ์์ฑ
var ๊ฐ์ฒด๋ช
= ๊ฐ์ฒด๋ช
(์ธ์1, ์ธ์2);
Dart
๋ณต์ฌ
โข
์์์ฝ๋
void main() {
// Person ํด๋์ค์ ์ธ์คํด์ค ์์ฑ
var person1 = Person('Alice', 25);
// ๋ ๋ค๋ฅธ ์ธ์คํด์ค ์์ฑ
var person2 = Person('Bob', 30);
// ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผ
print('Person 1: Name - ${person1.name}, Age - ${person1.age}');
print('Person 2: Name - ${person2.name}, Age - ${person2.age}');
// ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ
person1.introduceYourself(); // ์ถ๋ ฅ: Hello, my name is Alice and I am 25 years old.
person2.introduceYourself(); // ์ถ๋ ฅ: Hello, my name is Bob and I am 30 years old.
}
Dart
๋ณต์ฌ
์์ฑ์
๊ฐ์ฒด๋ฅผ ์์ฑํ ๋, ๋ณ์ ๋๋ ๋ฉ์๋๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ํด์ ์คํ๋๋ ๋ฉ์๋
๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ํน์ํ ๋ฉ์๋
์์ฑ์์ ์ข ๋ฅ
โข
๊ธฐ๋ณธ ์์ฑ์ (Default Constructor): ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์์ฑ์๋ก, ํด๋์ค์ ์์ฑ์๋ฅผ ์ ์ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ์์ฑ๋จ
โข
๋งค๊ฐ๋ณ์๊ฐ ์๋ ์์ฑ์ (Parameterized Constructor): ๊ฐ์ฒด ์์ฑ ์ ์ด๊ธฐ๊ฐ์ ์ ๋ฌ๋ฐ๋ ์์ฑ์
โข
๋ช
๋ช
๋ ์์ฑ์ (Named Constructor): ํด๋์ค ์ด๋ฆ.์๋ณ์ ํํ๋ก ์ ์๋๋ ์์ฑ์
class Person {
String name;
int age;
// ๊ธฐ๋ณธ ์์ฑ์
Person();
// ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์์ฑ์
Person(this.name, this.age);
// ๋ช
๋ช
๋ ์์ฑ์
Person.guest() {
name = 'Guest';
age = 18;
}
}
void main() {
var person1 = Person(); // ๊ธฐ๋ณธ ์์ฑ์
var person2 = Person('John', 25); // ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์์ฑ์
var person3 = Person.guest(); // ๋ช
๋ช
๋ ์์ฑ์
}
Dart
๋ณต์ฌ
์ถ์ ํด๋์ค
ํด๋์ค์ ๊ณ์ธต์ ์ธ ์ค๊ณ๋ฅผ ์ํด, ๊ตฌํ ์ฝ๋๊ฐ ์๋ ์ถ์ ๋ฉ์๋๋ก ๊ตฌ์ฑ๋ ํด๋์ค
์ถ์ ํด๋์ค๋ ์ผ๋ฐ ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ค๊ฐ ํํ๋ก, ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋๋ค:
โข
์ถ์ ํด๋์ค๋ ์ง์ ์ธ์คํด์คํํ ์ ์์ต๋๋ค (๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ)
โข
ํ๋ ์ด์์ ์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ ์ ์์ต๋๋ค
โข
์ผ๋ฐ ๋ฉ์๋์ ๋ณ์๋ ํฌํจํ ์ ์์ต๋๋ค
โข
๋ค๋ฅธ ํด๋์ค๊ฐ ์์(extends)ํ์ฌ ๊ตฌํํด์ผ ํฉ๋๋ค
โข
์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์
๋๋ค
โข
๊ณตํต๋ ํน์ฑ์ ํ ๊ณณ์์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค
โข
ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํฉ๋๋ค
์ถ์ ํด๋์ค ํค์๋
abstract
Dart
๋ณต์ฌ
abstract class Shape {
double getArea(); // ์ถ์ ๋ฉ์๋
}
class Circle extends Shape {
double radius;
Circle(this.radius);
double getArea() {
return 3.14 * radius * radius;
}
}
Dart
๋ณต์ฌ
abstract mixin class Musician {
// No 'on' clause, but an abstract method that other types must define if
// they want to use (mix in or extend) Musician:
void playInstrument(String instrumentName);
void playPiano() {
playInstrument('Piano');
}
void playFlute() {
playInstrument('Flute');
}
}
class Virtuoso with Musician { // Use Musician as a mixin
void playInstrument(String instrumentName) {
print('Plays the $instrumentName beautifully');
}
}
class Novice extends Musician { // Use Musician as a class
void playInstrument(String instrumentName) {
print('Plays the $instrumentName poorly');
}
}
Dart
๋ณต์ฌ
์์
๋ถ๋ชจ ํด๋์ค์ ๋ณ์์ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ฌ์ฌ์ฉํ๋ ๊ฒ
Dart์์ ์์์ extends ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํฉ๋๋ค. ์์์ ํตํด ๊ธฐ์กด ํด๋์ค์ ๊ธฐ๋ฅ์ ํ์ฅํ๊ณ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
โข
ํ๋์ ํด๋์ค๋ง ์์ ๊ฐ๋ฅ (๋จ์ผ ์์)
โข
๋ถ๋ชจ ํด๋์ค์ ๋ชจ๋ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ์
โข
@override ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ์ ์์
โข
super ํค์๋๋ฅผ ํตํด ๋ถ๋ชจ ํด๋์ค์ ๋ฉค๋ฒ์ ์ ๊ทผ ๊ฐ๋ฅ
โข
์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
โข
์ ์ง๋ณด์ ์ฉ์ด
โข
ํ๋ก๊ทธ๋จ์ ํ์ฅ์ฑ ํฅ์
class Animal {
void makeSound() {
print('Some generic sound');
}
}
class Dog extends Animal {
void makeSound() {
print('Woof! Woof!');
}
}
void main() {
var dog = Dog();
dog.makeSound(); // ์ถ๋ ฅ: Woof! Woof!
}
Dart
๋ณต์ฌ
๋ฏน์ค์ธ(Mixin)
๋ค์ค ์์์ ์ง์ํ๋ ๊ธฐ๋ฒ
๋ฏน์ค์ธ(Mixin)์ Dart์์ ํด๋์ค์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํน๋ณํ ์ฝ๋ ์ฌ์ฌ์ฉ ๋ฉ์ปค๋์ฆ์
๋๋ค. ์ผ๋ฐ์ ์ธ ์์๊ณผ๋ ๋ฌ๋ฆฌ, ์ฌ๋ฌ ๋ฏน์ค์ธ์ ๋์์ ์ฌ์ฉํ ์ ์์ด ๋ค์ค ์์๊ณผ ์ ์ฌํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
โข
์ฌ๋ฌ ํด๋์ค์์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
โข
ํ๋์ ํด๋์ค์ ์ฌ๋ฌ ๋ฏน์ค์ธ์ ์ ์ฉํ ์ ์์ต๋๋ค.
โข
with ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏน์ค์ธ์ ํด๋์ค์ ์ถ๊ฐํฉ๋๋ค.
โข
์์ฑ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
โข
mixin ํค์๋๋ก ๋ฏน์ค์ธ์ ์ ์ํฉ๋๋ค.
โข
with ํค์๋๋ก ํด๋์ค์ ๋ฏน์ค์ธ์ ์ ์ฉํฉ๋๋ค.
โข
์ฌ๋ฌ ๋ฏน์ค์ธ์ ์ฌ์ฉํ ๋๋ ์ผํ๋ก ๊ตฌ๋ถํฉ๋๋ค.
mixin Flying {
void fly() {
print('Flying high!');
}
}
class Bird with Flying {
// Bird ํด๋์ค์ Flying ๋ฏน์ค์ธ ์ถ๊ฐ
}
void main() {
var bird = Bird();
bird.fly(); // ์ถ๋ ฅ: Flying high!
}
Dart
๋ณต์ฌ
// Flying ๋ฏน์ค์ธ
mixin Flying {
void fly() {
print('Flying high!');
}
}
// Swimming ๋ฏน์ค์ธ
mixin Swimming {
void swim() {
print('Swimming gracefully!');
}
}
// Bird ํด๋์ค์ Flying ๋ฏน์ค์ธ ์ ์ฉ
class Bird with Flying {
String name;
Bird(this.name);
}
// Fish ํด๋์ค์ Swimming ๋ฏน์ค์ธ ์ ์ฉ
class Fish with Swimming {
String name;
Fish(this.name);
}
// Duck ํด๋์ค์ Flying๊ณผ Swimming ๋ฏน์ค์ธ ์ ์ฉ (๋ค์ค ์์)
class Duck with Flying, Swimming {
String name;
Duck(this.name);
}
void main() {
var eagle = Bird('Eagle');
eagle.fly(); // ์ถ๋ ฅ: Flying high!
var salmon = Fish('Salmon');
salmon.swim(); // ์ถ๋ ฅ: Swimming gracefully!
var mallard = Duck('Mallard');
mallard.fly(); // ์ถ๋ ฅ: Flying high!
mallard.swim(); // ์ถ๋ ฅ: Swimming gracefully!
}
Dart
๋ณต์ฌ
// Flying ๋ฏน์ค์ธ
mixin Flying {
void fly() {
print('Default flying behavior');
}
}
// Bird ํด๋์ค์ Flying ๋ฏน์ค์ธ ์ ์ฉ
class Bird with Flying {
String name;
Bird(this.name);
// Flying ๋ฏน์ค์ธ์ fly ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ
void fly() {
print('$name is flying high!');
}
}
void main() {
var eagle = Bird('Eagle');
eagle.fly(); // ์ถ๋ ฅ: Eagle is flying high!
}
Dart
๋ณต์ฌ
enum
์์๋ค์ ์ด๊ฑฐํ์ฌ ๋ฌถ์ด๋์ ํ์
enum Weekday { monday, tuesday, wednesday, thursday, friday }
void main() {
var today = Weekday.wednesday;
print(today); // ์ถ๋ ฅ: Weekday.wednesday
}
Dart
๋ณต์ฌ
static
๋ณ์ ๋๋ ๋ฉ์๋๋ฅผ ํ๋ก๊ทธ๋จ ์คํ ์, ๊ฐ์ฅ ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ณ ์ ํ๋ ํค์๋
class Calculator {
static double add(double a, double b) {
return a + b;
}
}
void main() {
var result = Calculator.add(5.0, 3.0);
print(result); // ์ถ๋ ฅ: 8.0
}
Dart
๋ณต์ฌ