copyWith
copyWith가 dart와 flutter만의 특별한 개념은 아니지만, 이 패턴은 꽤 자주 사용된다. `copyWith()`의 가장 큰 이점은 원래 개체(original)를 변경하지 않고, 원래 개체와 같은 속성의 새로운 object에 내가 원하는 값을 특정해서 생성할 수 있다는 점이다. 이를 통해 개체가 변경 가능한 '상태'를 포함하지 않으므로 테스트가 용이하고 관리하기 쉬운 앱을 만들 수 있게 된다.
Text(
"copyWith Test Sample",
style: Theme.of(context)
.textTheme
.headline
.copyWith(
color: Colors.red,
fontWeight: FontWeight.bold),
)
위 예제는 headline 테마를 복사 한 뒤, color와 fontWeight 속성을 오버라이딩 하는 코드이다. `copyWith`로 원본을 복사한 것이기 때문에 원본 테마와 값에는 변경사항 없이 내가 원하는 속성만 바꿔줄 수 있다.
이러한 copyWith 패턴은 클래스를 생성할 때도 응용할 수 있다.
class Person {
String name;
int age;
String job;
Person({required this.name, required this.age, required this.job});
Person copyWith(
{required String name, required int age, required String job}) =>
Person(
name: name,
age: age,
job: job,
);
}
위와 같이 copyWith 함수를 구현하면 이미 생성한 인스턴스를 복사하여 필요한 값만 교체 한 뒤 사용할 수 있다.
Person johnPark = Person(name: "john", age: 20, job: "teacher")
Person johnLee = johnPark.copyWith(age: 30, job: "student")
'Flutter' 카테고리의 다른 글
[Flutter] UI(2) - 'Horizontal viewport was given unbounded height' 에러 해결 (0) | 2023.12.10 |
---|---|
[Flutter] Widget(4) - GestureDetector (0) | 2023.12.09 |
[Flutter] Widget(3) - Align (1) | 2023.12.07 |
[Flutter] Widget(2) - ListView (1) | 2023.12.06 |
[Flutter] Widget(1) - Dialog, Alert Dialog, Simple Dialog, Show Dialog (0) | 2023.12.05 |