Flutter 개발자가 가장 많이 헷갈리는 키워드 중 하나가 바로 final 과 const 가 아닐까요? 두 키워드는 '값을 바꿀 수 없다'는 공통점 때문에 비슷해 보이지만, 실제로는 동작 시점과 불변성의 범위가 완전히 다르답니다. 두 키워드의 차이를 명확하게 이해할 수 있도록 정리해보겠습니다. ✔ final 키워드란? Dart에서 fin…
코딩을 하다 보면, 객체를 만들어야 하는데 생성자 매개변수가 딱 맞지 않을 때가 있습니다. 이럴 때를 위해 Dart에는 factory 키워드와 함께 생성자를 호출할 수 있어요. 케이크를 만들기 위해 밀가루(flour)와 계란(egg), 2가지 재료가 필요하다고 가정해 볼 텐데요, 비유를 통해 이해해보도록 해요. 일반 생성자: '레시피 원칙주의자&…
"리스트의 모든 숫자 더하기", "장바구니의 총금액 계산하기"... 코딩을 하다 보면, 리스트(List)에 담긴 여러 데이터를 조합하여 하나의 결과를 만들어 내야 할 때가 정말 많습니다. 가장 먼저 떠오르는 방법은 역시 for 반복문입니다. 하지만 for 문은 코드를 길게 만들고, 때로는 가독성을 해치기도 …
다트에서 ..의 뜻에 대해 알아보도록 합시다~ 아래 코드는 Dart에서 리스트를 셔플(shuffle)하고 첫 번째 요소를 가져오는 기능을 간결하게 구현한 방식입니다. final List<Map<String, String>> categories = []; Map<String, String>? selectedCategory;…
Equatable 을 사용하여 여러 final 속성을 props 에 포함시키려면, 해당 속성들을 List<Object> 로 반환해 주면 됩니다. 여러 개의 속성을 사용하고 싶다면, 간단하게 리스트에 각 속성을 추가하면 됩니다. 예를 들어, final int a 와 final int b 가 있을 때는 다음과 같이 처리할 수 있습니다~ fina…
만약 하위 클래스 에서 부모 클래스의 props 를 사용하지 않고 항상 오버라이드하여 자신의 상태만을 비교한다면, Equatable 을 직접 상속하는 것과 큰 차이가 없습니다. 기본 예시 코드~ abstract class SleepTimeState extends Equatable { const SleepTimeState(); @override …
Equatable 을 상속받을 때, 하위 클래스는 반드시 props 를 오버라이드할 필요는 없습니다. 하지만, 만약 하위 클래스에서 객체의 동등성을 판단하는 데 필요한 추가적인 프로퍼티가 있다면, 그 프로퍼티를 props 에 포함시켜야 합니다. 예시코드~ abstract class SleepTimeState extends Equatable { con…
Flutter 개발을 하면서 가장 자주 마주치는 두 키워드가 바로 const 와 final 입니다. Dart에서 const 와 final 은 변수 선언 시 변경 불가능한 값을 정의하는 데 사용됩니다. 하지만 이 둘은 미묘한 차이점을 가지고 있고, 사용 목적과 상황에 따라 다르게 적용되어야 합니다. 이 글에서는 const 와 final 의 공통점과 차이점을…
runApp(const MyApp()); 와 runApp(MyApp()); 사이의 차이는 const 키워드의 사용 여부에 따른 차이입니다. 이 차이는 성능 최적화와 불변 객체와 관련이 있습니다. 1. const MyApp() 사용 runApp(const MyApp()); const 키워드를 사용하면, MyApp 위젯이 불변 객체로 만들어집니다. 컴파…
Flutter에서 AxisAlignment는 main과 cross가 있습니다. 2개의 차이는 Row에 대해 적용하느냐, Column에 대해 적용하느냐에 따라 차이가 있는데요, main은 기본을 뜻하지요? 그리하여 row와 같이 행, 가로가 기준일 때에는 가로방향을 뜻하고요, column과 같이 열, 세로가 기준일 때에는 세로방향을 뜻해요. Row 위젯 m…
플러터에서 async async* yield yield* 에 대해 알아보도록 합시다. 애스터리스크(*)가 마치 포인터처럼 보이는데, 그건 아니고요, 😊 특수문자가 없으면 계산 결과(result of an asynchronous computation), 특수문자가 있으면 스트림과 같은 데이터의 연속(sequence of data)을 반환한다는 뜻입니다. …
... 으로 시작하는 연산자가 궁금하신가요? 스프레드 연산자(spread operator)라고 하는데요, 여러 항목을 컬렉션에 추가할 때에 사용할 수 있습니다. 살펴보시지요. ... operator (스프레드 연산자) '다트'에서 스프레드 연산자('...')를 유용하게 사용할 수 있는 곳은 특히 리스트(List)입니다! 😊…
플러터에서 Building with plugins requires symlink support 오류가 발생하였을 때, 해결 방법에 대해 알아보도록 합시다. Launching lib\main.dart on Windows in debug mode... Exception: Building with plugins requires symlink support. …