Flutter

[Flutter] 상수(const, final)와 .copyWith() 메소드

sinw212 2023. 7. 18. 21:09

Flutter 개발은 Dart 라는 언어를 사용한다.

Dart로 상수를 선언할 때 사용하는 키워드로는 const final이 있다.

 

먼저 상수란, 한 번 값을 대입하면 변경할 수 없는 값을 말한다.

const는 컴파일 타임에 값이 초기화되는 반면, final은 실행 중(런타임)에 값이 초기화된다는 차이점이 있다.

 

가장 많이 사용하는 예시로 DateTime.now() 를 활용한 코드가 있다.

//DateTime.now()는 실행되는 시간을 출력할 때 사용

//final은 실행 중 값이 초기화. 정상 출력
final finalLog = DateTime.now()

//const는 컴파일 시 값이 초기화. 실행을 언제할지 모르기 때문에 컴파일 시간은 담을 수 없음. 에러 발생
const constLog = DateTime.now()

이러한 상수를 활용하여 상수 전용 파일을 만들 수 있다.

lib 폴더 아래에 constants.dart 파일을 만들어, 자주 사용하는 색상과 텍스트 스타일과 관련한 값들을 상수화시켜줬다.

(변수를 _로 시작하면 지역변수로 인식하기 때문에 다른 클래스에서 사용이 불가능하다. 주의하도록 하자.

또한, 모든 변수가 소문자 k로 시작하는 이유는 구글 flutter 팀에서 공통적으로 사용하는 코딩 컨벤션이다.)

/* constants.dart */
import 'package:flutter/material.dart';

class ConstantStyles {
    //다른 클래스에서 사용할 수 있도록 static 키워드 사용
    static const Color kDartGrey = Color(0xFF111111);
    static const Color kLightGrey = Color(0xFFEEEEEE);
    
    static const kBoldTextStyle = TextStyle(color: Colors.white, fontWeight: FontWeight.bold);
    static const kTitleTextStyle = TextStyle(color: kLightGrey, fontSize: 20);
}

위와 같이 작성한 상수를 사용하다보면, 특정 값만 바꿔야 되는 상황이 생기기도 한다.

상수를 하나 더 작성해주거나 아래와 같이 .copyWith() 메소드를 사용하여 특정 값만을 바꿀 수 있다. 

Text(
    "textStyle 사용",
    //kTitleTextStyle을 사용하되, fontSize를 25로 변경하고 싶은 경우
    style: ConstantStyles.kTitleTextStyle.copyWith(fontSize: 25),
), ...