해결된 질문
작성
·
30
1
안녕하세요 강사님 ! 수업 잘듣고 있습니다.
제 질문은
다트에서 커스텀클래스 안에 모든 속성에 final 키워드를 붙이면 생성자 앞에 const 키워드를 붙여서 const 커스텀 클래스를 만들수 있었잖아요~
이제 여기서 궁금한점은 ! 모든 속성중에 리스트가 있다면 final 키워드를 붙여도 그 리스트는 add 같은 동작을 할수 있는데 가변객체가 포함된 커스텀 클래스에 const 키워드 붙일 수있나 하는 것입니다 !
답변 1
1
안녕하세요
const
가 붙은 경우에는 컴파일 타임에 연산이 끝나고 완전 불변 객체로 다뤄지기 때문에 내부에 final
로 선언된 배열이 있어도 해당 속성에 원소를 변경하는게 불가능합니다.
아래 예제를 보시면, const
가 붙은 경우에는 내부 속성에 add()
함수를 호출 할 수 없습니다.
DartPad 링크에서 해당 코드를 실행해 보실 수 있습니다.
void main() {
try {
const family = Family(["mom"]);
family.members.add("dad");
print(family.members);
} catch (e) {
print(e.toString()); // Unsupported operation: add
}
final family = Family(["mom"]);
family.members.add("dad");
print(family.members); // [mom, dad]
}
class Family {
final List<String> members;
const Family(this.members);
}
감사합니다 :)