Dart#2 객체지향 프로그래밍(OOP)
✅ 인스턴스
인스턴스
: 클래스로 실제 결과물을 만들어 내는 것
- 같은 값에 대해
const
로 선언할 경우 같은 인스턴스 !
Idol newJeans1 = const Idol('뉴진스', ['하니', '민지']);
Idol newJeans2 = const Idol('뉴진스', ['하니', '민지']);
print(newJeans1 == newJeans2);
- 값은 값에 대해 const로 선언하지 않을 경우 다른 인스턴스로 인식
Idol newJeans3 = Idol('뉴진스', ['하니', '민지']);
Idol newJeans4 = Idol('뉴진스', ['하니', '민지']);
print(newJeans3 == newJeans4);
✅ construcor: 생성자
immutable programming
: 선언 후 변경 불가능 ❌
class Idol {
final String name;
final List<String> members;
Idol(String name, List<String> members)
: this.name = name, this.members = members;
const Idol(this.name, this.members);
Idol.fromList(List values)
: this.members = values[0], this.name = values[1];
void sayHello() {
print('안녕하세요 ${this.name}입니다.');
}
void introduce() {
print('저희 멤버에는 ${this.members}가 있습니다.');
}
}
Idol newJeans = Idol.fromlist([['하니', '민지'], '뉴진스']);
print(newJeans.name);
newjeans.sayHello();
Idol bts = Idol.fromlist([['v', 'jk'], 'bts']);
print(bts.name);
bts.introduce();
✅ getter & setter
getter
: 데이터를 가져올 때
setter
: 데이터를 설정할 때
class Idol {
String name;
List<String> members;
Idol(this.name, this.members);
Strring get firstMember {
return this.members[0];
}
set firstMember(String name) {
this.members[0] = name;
}
}
Idol newJeans = Idol('뉴진스', ['하니', '민지']);
print(newJeans.firstMember);
newJeans.firstMember = '아이유';
print(newJeans.firstMember);
✅ private
- 이름 앞에
_
붙이면 해당 파일 내에서만 사용 가능하며, 외부에선 사용 불가
- 변수, 함수 등에서도
_
붙으면 동일하게 private 동작
class _PrivateIdol {
final String _name;
_PrivateIdoll(this._name);
}
✅ 상속: inheritance
- 상속을 받으면 부모 클래스의 모든 속성을 자식 클래스가 부여받음
- 자식 → 부모 클래스로는 속성을 물려주지 않음
- 자식 클래스끼리도 속성 공유 ❌
super()
: 부모의 파라미터 정의
class Idol {
Idol({ required this.name, required this.membersCount });
}
class BoyGroup extends Idol {
BoyGroup(String name, int membersCount)
: super(name: name, membersCount: membersCount);
}
BoyGroup bts = BoyGroup('bts', 7);
bts.sayName();
print(bts is Idol);
print(bts is BoyGroup);
✅ method & override
method
: function (class 내부에 있는 함수)
@override
: 덮어쓰다 (우선시하다)
class TimesTwo {
final int number;
TimesTwo(this.number);
int calculate() {
return number * 2;
}
}
class TimesFour extends TimesTwo {
TimesFour(int number): super(number);
@override
int calculate() {
return this.number * 4;
return super.calculate() * 2;
}
}
TimesTwo tt = TimesTwo(2);
print(tt.calculate());