class: 설계서 만드는 것
instance: class 통해서 실제로 결과물 만들어 내는 것
void main() {
Idol blackPink = Idol(
"블랙핑크",
["지수", "제니", "리사", "로제"],);
print(blackPink.groupName);
print(blackPink.members);
blackPink.sayHello();
blackPink.intro();
}
class Idol {
String groupName;
List<String> members;
Idol(String groupName, List<String> members)
: this.groupName = groupName,
this.members = members;
void sayHello() {
print("안녕하세요. ${this.groupName}입니다.");
}
void intro() {
print("저희 멤버는 ${this.members}가 있습니다.");
}
}
공통된 부분을 설계서에 작성해두고, 변동되는 부분을 생성자의 매개변수로 주면 재사용 가능
void main() {
Idol blackPink = Idol(
"블랙핑크",
["지수", "제니", "리사", "로제"],);
print(blackPink.groupName);
print(blackPink.members);
blackPink.sayHello();
blackPink.intro();
}
class Idol {
String groupName;
List<String> members;
Idol(this.groupName, this.members);
void sayHello() {
print("안녕하세요. ${this.groupName}입니다.");
}
void intro() {
print("저희 멤버는 ${this.members}가 있습니다.");
}
}
Idol(String groupName, List<String> members)
: this.groupName = groupName,
this.members = members;
위 부분을 아래와 같이 간단히 수정해도 결과 같게 나옴
Idol(this.groupName, this.members);
List value 이용해 하는 방법
void main() {
Idol blackPink = Idol(
"블랙핑크",
["지수", "제니", "리사", "로제"],);
print(blackPink.groupName);
print(blackPink.members);
blackPink.sayHello();
blackPink.intro();
Idol bts = Idol.fromList(
[
"bts",
["RM", "뷔", "정국", "슈가", "지민", "제이홉", "진"],
]);
print(bts.groupName);
print(bts.members);
bts.sayHello();
bts.intro();
}
class Idol {
String groupName;
List<String> members;
Idol(this.groupName, this.members);
Idol.fromList(List values)
: this.groupName = values[0],
this.members = values[1];
void sayHello() {
print("안녕하세요. ${this.groupName}입니다.");
}
void intro() {
print("저희 멤버는 ${this.members}가 있습니다.");
}
}
class 선언할 때는 construct 통해 외부에서 받을 수도 있고, named construct 통해서 매개변수로 받을 수도 있음
처음 선언한 값을 마음대로 바꿀 수 없게 하기 위해 final 키워드 넣음
대부분의 경우 class의 변수를 final로 선언하는 습관을 들여 예상치 못한 버그 줄이기!
class Idol {
final String groupName;
final List<String> members;
Idol(this.groupName, this.members);
Idol.fromList(List values)
: this.groupName = values[0],
this.members = values[1];
void sayHello() {
print("안녕하세요. ${this.groupName}입니다.");
}
void intro() {
print("저희 멤버는 ${this.members}가 있습니다.");
}
}
const 선언 유무
void main() {
Idol blackPink = const Idol(
"블랙핑크",
["지수", "제니", "리사", "로제"],);
Idol blackPink2 = const Idol(
"블랙핑크",
["지수", "제니", "리사", "로제"],);
이런 식으로 const로 선언하면 같은 인스턴스가 됨
const 선언 안하면 다른 인스턴스로 구분 됨
getter: 데이터 선언할 때
setter: 데이터 가져올 때
void main() {
Idol blackPink = Idol(
"블랙핑크",
["지수", "제니", "리사", "로제"],);
// print(blackPink.firstMember);
blackPink.firstMember = "dami";
print(blackPink.firstMember);
print(blackPink.members);
}
class Idol {
String groupName;
List<String> members;
Idol(this.groupName, this.members);
}
//getter
String get firstMember{
return this.members[0];
}
//setter
set firstMember(String name){
this.members[0] = name;
}
}
blackPink.firstMember = "dami"; 해주면
[dami, 제니, 리사, 로제] 처럼 this.members[0] 값이 바뀜
getter 사용하는 이유: 함수와 기능적인 차이는 없지만, getter는 데이터를 간단히 가공할 때 사용
함수는 로직이 많이 들어가는 형태에서 많이 사용
뉘앙스가 조금 다름
private
함수, 변수 어디든 이름 앞에 _만 붙여주면 됨
-> 외부에서 파일을 불러와도 쓸 수가 없음
같은 파일에서만 쓸 수 있음
'CS > Flutter | Dart' 카테고리의 다른 글
Dart cascading operator, functional programming (0) | 2023.07.12 |
---|---|
Dart Functional Programming - map, set, reduce, fold (1) | 2023.07.10 |
Dart 상속, static, interface, generic (0) | 2023.07.09 |
Dart 기본 - if, for, while, function, parameter, typedef (0) | 2023.07.09 |
Dart 기본 - 변수형 (0) | 2023.07.07 |