late는 왜 쓰나?

테디준·2022년 11월 9일
0

1. Late를 붙이라는 문구는 왜 뜨나?

변수를 사용하면서 아래와 같이 쓰면 "Non-nullable instance field 'strokePaint' must be initialized."이런 경고문구가 뜬다. 그럴 경우 대개는 생성자를 만들면 해결된다.

final Photo photo;

const PhotoWidget({Key? key, required this.photo}) : super(key: key);

그런데 가끔 Late를 붙이라는 얘기가 뜬다. 왜 그럴까?

2. Late란 무엇인가?

다트에서는 late 변수를 제공한다. late변수를 사용하면 non-nullable변수의 초기화를 나중에 할 수 있다. 그런데 nullable로 선언해도 나중에 초기화를 할 수 있는데, 굳이 late라는 걸 만들어 놨을까?

late대신 nullable로 선언할 경우, 개발자가 다른 사람에게 코드의 관리를 넘겼을 때, 넘겨받은 관리자가 null이라는 값도 변수에 의미있는 값으로 오해할 수 있기 때문이다.

<final Photo photo;>만 쓰고 아래 생성자 초기화를 해주지 않을 경우, 에러가 뜬다. Dart에 대해 잘 이해하지 못하는 경우 <Photo? photo;>를 써서 해결할 수도 있다.

여기서 한가지 문제점이 있다. 개발자는 Photo를 절대 null로 만들 생각이 없는데 단순히 눈앞의 에러를 해결하기 변수의 자료형을 nullable로 만들었고 이는 변수에 null값을 넣는것도 의미있다 라고 얘기하는 것과 같다. 그리고 회사를 퇴사하면서 다른 사람에게 이 코드를 넘겼다.

새로운 담당자는 Photo가 null이되면 안되는 사실을 모른채, 변수의 자료형이 nullable인 것을 보고 Photo에 null이 들어가도 상관없겠지 라는 생각을 할 수 있다. 그리고 null값이 들어가도 신경쓰지 않는다.

이러한 일이 벌어지면 분명 큰 일이 일어날 것이다. 이를 방지하기 위해서 late라는 키워드를 사용하는 것이다.

구글에서는 late에 대해 이렇게 말한다
late는 값의 초기화를 뒤로 미루지만, 개발자가 null을 실수로 사용하는것을 막아준다.

0개의 댓글