Search

๊ฐ์ฒด์ง€ํ–ฅ

๊ฐ์ฒด์ง€ํ–ฅ

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
๋ณต์‚ฌ