중급
생성자
기본 생성자, named constructor, factory constructor의 역할을 구분합니다.
개념 먼저 보기
생성자의 기본 개념부터 잡기
생성자 문서는 먼저 용어의 뜻을 잡고, 그 다음 Flutter 코드에서 어디에 쓰이는지 연결해서 읽는 것이 좋습니다.
아래 항목들은 이 문서에서 다루는 내용을 작은 단위로 나눈 것입니다. 각 항목을 읽은 뒤 예제를 보면 코드가 훨씬 덜 추상적으로 느껴집니다.
종류별로 하나씩
생성자에서 나눠 볼 핵심 요소
기본 생성자
클래스 이름과 같은 이름으로 선언합니다.
언제 쓰나: this.field 축약 문법으로 필드를 바로 초기화할 수 있습니다.
Flutter에서: required named parameter는 Flutter 스타일 생성자의 핵심입니다.
// 생성자 예제입니다.
// 먼저 코드의 큰 흐름을 보고, 주석을 따라 각 줄의 역할을 확인하세요.
class User {
const User({required this.name});
final String name;
factory User.fromJson(Map<String, dynamic> json) {
return User(name: json['name'] as String);
}
}
named와 factory
named constructor는 같은 타입을 여러 방식으로 만들 때 좋습니다.
언제 쓰나: factory constructor는 기존 객체를 반환하거나 복잡한 생성 로직을 숨길 수 있습니다.
Flutter에서: JSON 변환에는 보통 factory Class.fromJson 패턴을 사용합니다.
// 생성자 예제입니다.
// 먼저 코드의 큰 흐름을 보고, 주석을 따라 각 줄의 역할을 확인하세요.
class User {
const User({required this.name});
final String name;
factory User.fromJson(Map<String, dynamic> json) {
return User(name: json['name'] as String);
}
}
부연 설명
기본 생성자
- 클래스 이름과 같은 이름으로 선언합니다.
- this.field 축약 문법으로 필드를 바로 초기화할 수 있습니다.
- required named parameter는 Flutter 스타일 생성자의 핵심입니다.
부연 설명
named와 factory
- named constructor는 같은 타입을 여러 방식으로 만들 때 좋습니다.
- factory constructor는 기존 객체를 반환하거나 복잡한 생성 로직을 숨길 수 있습니다.
- JSON 변환에는 보통 factory Class.fromJson 패턴을 사용합니다.
깊게 이해하기
생성자는 객체가 유효한 상태로 태어나도록 보장하는 관문입니다. 어떤 값이 반드시 필요하고 어떤 값은 기본값을 가져도 되는지 생성자에 드러나야 합니다.
factory 생성자는 JSON 변환, 캐싱, 하위 타입 선택처럼 단순 필드 초기화보다 복잡한 생성 흐름을 숨길 때 적합합니다.
상세 예제
기본 생성자, named constructor, factory fromJson을 함께 쓰는 예제입니다.
class Course {
const Course({
required this.title,
required this.lessons,
});
const Course.empty()
: title = '새 강의',
lessons = const [];
final String title;
final List<String> lessons;
factory Course.fromJson(Map<String, dynamic> json) {
return Course(
title: json['title'] as String? ?? '제목 없음',
lessons: List<String>.from(json['lessons'] as List? ?? const []),
);
}
}
실무에서 주의할 점
- 기본값이 의미 있는 경우 named constructor를 고려하세요.
- JSON 변환에는 타입 캐스팅 실패 가능성을 항상 생각하세요.
- factory는 반드시 새 객체를 만들지 않아도 될 때 특히 유용합니다.
실습 체크리스트
required 생성자 작성fromJson 생성자 만들기factory가 필요한 이유 설명