02. 다트 객체지향 프로그래밍
2024. 4. 9. 21:06
02. 다트 객체지향 프로그래밍
다트는 객체 지향 프로그래밍을 지원함
플러터 또한 객체지향 프로그래밍 중심으로 설계된 프레임워크
'클래스'를 기반으로 '인스턴스화'를 진행하여 '인스턴스를' 생성한다.
클래스
// 1. 기초 클래스 선언
class Idol {
String name = '블랙핑크';
void sayName() {
print('저는 ${this.name} 입니다.');
print('저는 $name입니다.'); // 속성 이름이 하나라면 다음과 같은 형태도 가능
}
}
// 2. 클래스 생성
void main() {
Idol blackPink = Idol();
blackPink.sayName();
}
// 3. 생성자 활용
class Idol {
final String name;
// 방법1
Idol(String name : this.name = name);
// 방법 2
Idol(this.name);
void sayName() {
print('저는 ${this.name} 입니다.');
}
}
void main() {
Idol blackPink = Idol('블랙핑크');
blackPink.sayName();
}
// 4. 네임드 생성자 - 클래스를 생성하는 여러 방법을 명시하고 싶을 때 사용
class Iodl {
final String name;
final int membersCount;
//생성자
Idol(String name, int membersCount)
: this.name = name,
this.membersCount = membersCount;
//네임드 생성자
Idol.fromMap(Map<String, dynamic> map) {
: this.name = map['name'],
this.membersCount = map['membersCount'];
}
}
// 5. 프라이빗 변수 : '_'로 변수명 시작
class Idol {
String _name; // Idol.name의 형태로 접근 불가
Idol(this.name);
}
// 6. 게터/세터
class Idol {
String get name {
return this._name;
}
set name(String name) {
this._name = name;
}
}
void main() {
Idol blackPink = Idol();
blackPink.name = '블랙핑크'; //세터
print(blackPink.name); //게터
}
상속 (extends)
class Idol {
final String name;
final int membersCount;
Idol(this.name, this.memberCount);
void sayName() {
print('저는 ${this.name}입니다.');
}
void sayMembersCount() {
print('${this.name} 멤버는 ${this.membersCount}명 입니다.');
}
}
class BoyGroup extends Idol {
BoyGroup(String name, int membersCount) : super(name, membersCount);
// 상속받지 않은 메소드
void sayMale() {
print('저희는 남자아이돌 입니다.');
}
}
오버라이드
class GirlGroup extends Idol {
GirlGroup(this.name, this.membersCount);
@override
void sayName() {
print('저는 여자아이돌 ${this.name}입니다.');
}
}
인터페이스 (implements)
상속과 다른 점은, 모든 기능을 재정의 해야한다는 점이다.
class GirlGroup implements Idol {
final String name;
final int membersCount;
GirlGroup(this.name, this.membersCount);
void sayName() {
print('저는 여자아이돌 ${this.name}입니다.');
}
void sayMembersCount() {
print('${this.name} 멤버는 ${this.membersCount}명 입니다.');
}
}
믹스인
특정 클래스에 원하는 기능들만 골라 넣을 수 있는 기능
mixin IdolSingMixin on Idol {
void sing() {
print('${this.name}이 노래를 부릅니다.');
}
}
//with 키워드와 함께 사용
class BoyGroup extends Idol with IdolSingMixin {
BoyGroup(super.name, super.memberCount);
void sayMale() {
print('저는 남자아이돌 입니다.');
}
}
추상(abstract)
abstract class Idol {
final String name;
final int membersCount;
Idol(this.name, this.membersCount);
void sayName(); // 추상 메소드 선언
void sayMembersCount(); // 추상 메소드 선언
}
class GirlGroup implements Idol {
final String name;
final int membersCount;
GirlGroup(this.name, this.membersCount);
void sayName() {
print('저는 여자아이돌 ${this.name}입니다.');
}
void sayMembersCount() {
print('${this.name} 멤버는 ${this.membersCount}명 입니다.');
}
}
제네릭
T : 변수타입
E : 리스트 내부 요소들의 타입
K : 키 값
V : 밸류 값
class Cache<T> {
final T data;
Cache({required this.data,});
}
void main() {
final cache = Cache<List<int>>(data: [1,2,3],);
print(cache.data.reduce((value, element) => value + element));
}
스태틱
class Counter {
static int i = 0; // 클래스 자체에 값 귀속
Counter() {
i++;
print(i++);
}
}
void main() {
Counter count1 =Counter(); // i = 1
Counter count2 =Counter(); // i = 2
Counter count3 =Counter(); // i = 3
}
캐스케이드
void main() {
Idol blackpink = Idol('블랙핑크', 4)
..sayName()
..sayMembersCount(); // 선언과 동시에 사용 가능
}
'책 > [묘공단] 코드팩토리의 플러터 프로그래밍' 카테고리의 다른 글
06. 기본 위젯 알아보기 (0) | 2024.04.14 |
---|---|
05. 플러터 입문하기 (0) | 2024.04.14 |
04. 다트 3.0 신규 문법 (0) | 2024.04.09 |
03. 다트 비동기 프로그래밍 (0) | 2024.04.09 |
01. 다트 입문하기 (변수선언, 컬렉션, typedef) (1) | 2024.04.07 |