1

손세은·2023년 10월 16일
0

immutable

  • 이뮤터블 "불변", 변하지 않는 상태
  • 데이터의 무결성을 보장하는 첫 번째 발걸음
  • 무결성 : 데이터가 손상되지 않고 변경되지 않는 것
  • 우리의 데이터는 도중에 절대 변경되면 안돼요!
    • 예를 들어 나의 이름 !
    String myName = 'Teddy'
     myName = 'TedStar'                     // [ O ]
  • 생각해보니 이름은 바뀔일이 없는데? 오히려 바뀌면 안되는 데이터 인데?
    • 이 변수는 절대 못바꾸게 해야겠다!
      -> 내 변수를 immutable 로 바꿔야겠다!

2가지의 immutable 방법

final과 const

  const String myName = 'Teddy'
  myName = 'TedStar'                     // [ X ]
  
  final String myName = 'Teddy'
  myName = 'TedStar'                     // [ X ]
  • 2가지 키워드로 변수에 Lock를 걸 수 있다.
  • final과 const 가 사용된 이 순간부터는 절대 myName에 접근해서 데이터를 바꿀 수 없다.
  • 근데 List에서는 결과가 다르다.

final과 const의 차이점

  • const: 컴파일 타임에 미리 정의해놓는다.
    • 즉, 어플 개발을 다 마치고 어플 개발품 상태 그 자체일 때
  • final: 런타임에 정의한다.
    • 어플이 실행될 때 결정하는 데이터 그 자체일 때
  • const로 정의한 데이터는 속도가 더 빠르고 효율적으로 사용이 가능하다.

DateTime.now( )

  • 이 함수는 현재 시간과 날짜를 리턴한다. (동적인 데이터)
  • 우리가 원하는 것은 어플이 켜졌을 때의 시간을 가져오길 원하므로 final을 쓰는게 맞다.
  • const는 동적인 데이터를 저장하지 못하고, 정적인 데이터만 저장 가능하다.
  const DateTime now = DateTime.now()     // [ X ]
  
  final  DateTime now = DateTime.now()    // [ O ]

어려워요!

const 를 사용 해야하는 때 :

  • 값이 컴파일 타임 때 계산될 수 있는 상수 일 때
  • 아예 수정 불가능한 리스트의 데이터를 가질 때
  • 플러터가 쓰라고 할 때

final 를 사용 해야하는 때 :

  • 내가 데이터를 한 번만 넣고, 두 번 다시 안바꾼다고 약속할 때

그래서 이거 왜 쓰나요?

class BuildTestWidget extends StatefulWidget {
  const BuildTestWidget({Key? key}) : super(key: key);

  
  State<BuildTestWidget> createState() => _BuildTestWidgetState();
}

class _BuildTestWidgetState extends State<BuildTestWidget> {
  
  Widget build(BuildContext context) {
    return Column(
      children: [
        const Text('Constant text'),
        Container(
          color: Colors.red,
        ),
        GestureDetector(
          onTap: () => setState(() {}),
          child: const Text('call setState'),
        ),
      ],
    );
  }
}
  • 이걸 Flutter DevTool에서 봤더니?
    • const로 만들어진 StatelessWidget은 이미 빌드가 한 번 됐었으니까 (컴파일) 때 새로 빌드할 필요가 없구나!
  • 플러터는 효율적인 코딩을 하라고 우리에게 잔소리함

결론: 세은이는 아직 못알아먹었으니까 플러터가 하라는대로 하도록 하자

profile
힙스터 개발자가 될래요

0개의 댓글