sealed class 사용 문의2
75
投稿した質問数 15
알려주신 sealed class으로 내용 작성 중에 선생님이 의도하신 부분으로 작성을 했는지 문의드립니다.
1.get_notes_use_case.dart 부분 switch case 이중 작성 부분
2.switch case 이중 작성 부분 *참고코드4 처럼 final을 안쓰고 사용가능 여부
note_order.dart
*NoteOrder sealed class 구현부
*참고 코드1
import 'package:flutter_note_app/domain/model/util/order_type.dart';
sealed class NoteOrder<T> {
factory NoteOrder.title(OrderType orderType) = NoteOrderTitle;
factory NoteOrder.date(OrderType orderType) = NoteOrderDate;
factory NoteOrder.color(OrderType orderType) = NoteOrderColor;
}
class NoteOrderTitle<T> implements NoteOrder<T> {
OrderType orderType;
NoteOrderTitle(this.orderType);
}
class NoteOrderDate<T> implements NoteOrder<T> {
OrderType orderType;
NoteOrderDate(this.orderType);
}
class NoteOrderColor<T> implements NoteOrder<T> {
OrderType orderType;
NoteOrderColor(this.orderType);
}
order_type.dart
*OrderType 구현부 sealed class 구현부
*참고 코드2
sealed class OrderType<T> {
factory OrderType.ascending() = Ascending;
factory OrderType.descending() = Descending;
}
class Ascending<T> implements OrderType<T> {
Ascending();
}
class Descending<T> implements OrderType<T> {
Descending();
}
get_notes_use_case.dart
*notes use case 구현부
*참고 코드3
import 'package:flutter_note_app/domain/model/note.dart';
import 'package:flutter_note_app/domain/model/util/note_order.dart';
import 'package:flutter_note_app/domain/model/util/order_type.dart';
import 'package:flutter_note_app/domain/repository/note_repository.dart';
class GetNotesUseCase {
final NoteRepository repository;
GetNotesUseCase(this.repository);
Future<List<Note>> call(NoteOrder noteOrder) async {
List<Note> notes = await repository.getNotes();
switch (noteOrder) {
case NoteOrderTitle(orderType: final orderType):
switch (orderType) {
case Ascending():
notes.sort((a, b) => a.title.compareTo(b.title));
break;
case Descending():
notes.sort((a, b) => -a.title.compareTo(b.title));
break;
}
break;
case NoteOrderDate(orderType: final orderType):
switch (orderType) {
case Ascending():
notes.sort((a, b) => a.timestamp.compareTo(b.timestamp));
break;
case Descending():
notes.sort((a, b) => -a.timestamp.compareTo(b.timestamp));
break;
}
break;
case NoteOrderColor(orderType: final orderType):
switch (orderType) {
case Ascending():
notes.sort((a, b) => a.color.compareTo(b.color));
break;
case Descending():
notes.sort((a, b) => -a.color.compareTo(b.color));
break;
}
break;
}
return notes;
}
}
*저번 질문에서 선생님이 알려준 final 안쓰고 사용할수 있는 팁
*참고 코드4
switch (event) {
case ChangeColor():
_changeColor(event.color);
break;
case SaveNote():
_saveNote(event.id, event.title, event.content);
break;
}
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
回答 2
0
참고 1, 2 모두 제네릭이 사용되지 않고 있어서 제네릭은 제거해도 될 것 같습니다.
참고 2는 클래스내부에 상태가 없기 때문에 enum으로 사용해도 될 것 같습니다.
참고 3 코드에서는 dart 의 switch 를 활용한 패턴 코드에서는 break 를 쓰지 않아도 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. mhlee님께서 질문하신 내용을 확인했습니다. sealed class 사용 시 switch case 이중 작성과 final 키워드 사용 여부에 대한 질문으로 이해했습니다.
1. switch case 이중 작성
sealed class 사용 시, 특정 타입의 인스턴스가 여러 가지 하위 타입 중 어느 것인지 알기 위해 switch case 문을 사용할 수 있습니다.
- 예를 들면, NoteOrder 에서 OrderType 을 통해 추가적인 분기를 두어 정렬 방식을 선택하고 계시며, 이는 올바른 방식입니다.
- 다만, 코드의 가독성을 조금 더 높이기 위해 final 키워드를 생략하고 단순히 orderType 으로 접근하는 것도 가능합니다.
2. final 키워드 사용 여부
final키워드: Dart의switch문에서는 객체의 특정 필드를 패턴 매칭을 통해 추출할 수 있습니다.final키워드 없이도 컴파일러는 이를 안정적으로 해석할 수 있도록 개선되었습니다.
- 따라서,
final키워드를 사용하지 않고도 접근할 수 있으니 참고해주세요. 아래와 같이 작성할 수 있습니다:
switch (orderType) { case Ascending(): notes.sort((a, b) => a.title.compareTo(b.title)); break; case Descending(): notes.sort((a, b) => -a.title.compareTo(b.title)); break; }
위와 같은 방식으로 작성하는 것은 전혀 문제가 없으며, 이 코드 스타일을 유지하는 것이 좋습니다.
질문하신 부분에 대해 자세히 설명을 드렸습니다. 아래는 관련된 유사 사례와 추가적인 참고 링크입니다:
- sealed class 데이터 접근: sealed class 내 데이터 접근 방법을 다룬 게시물입니다.
- freezed3.0에서 build시 when생성되지 않습니다.: freezed 패키지로 인해 발생하는 문제와 해결 방법을 안내합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
MVVM, 클린 아키텍처 관련 질문 있습니다.
0
85
2
가끔씩 ui가 깨지는? 현상이 있어서 질문드립니다.
0
91
1
freezed 3.0 대응된 코드 깃헙에도 업데이트 해주실 수 있으신가요?
0
176
3
sealed class 사용시 기능은 동작하지만 Radio위젯에 선택 표시가 안되는 부분 질문
0
117
2
sealed class 사용시 The getter 'orderType' isn't defined for the type 'NoteOrder<dynamic>' 오류
0
92
2
유즈케이스 관련하여 질문 드립니다.
0
91
1
mockito사용시 오류 해결법
1
122
2
sealed class 사용 문의
0
116
2
freezed3.0에서 build시 when생성되지 않습니다.
0
263
2
Try implementing the missing methods, or make the class abstract. 문제해결 공유
0
236
2
This is likely caused by a misconfigured builder definition. 오류 해결 방법
1
315
3
강의 화면이 안보여요
0
133
3
Flutter에서 추천하는 Navigator, Router
0
322
2
The following ProgressEvent object was thrown resolving an image codec: [object ProgressEvent]
0
324
3
event와 ui_event
0
211
1
코드 색깔 관련 질문
0
207
1
Photo.fleezed.dart,photo.g.dart삭제시 에러
0
203
2
sealed class 적용 시...
0
325
1
클린 아키텍처 질문
0
307
1
sealed class 데이터 접근
0
323
1
서버에서 데이터를 가져와서 사용하는 경우...
0
230
1
뷰/뷰모델 작성 질문
0
269
1
freezed JsonKey 사용 예시 공유
1
789
1
아이폰에서 APP 실행 안되는 현상
0
641
1

