toString() 오버라이드
Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 70번째.
Dart에서 객체를 출력할 때, Instance of 'Person'과 같은 메시지를 보게 될 수도 있습니다. 이는 그리 도움이 되지 않습니다. 이런 현상이 발생하는 이유는 모든 클래스가 클래스 이름만 반환하는 기본 toString() 메서드를 Object로부터 상속받기 때문입니다.
toString()을 오버라이딩함으로써, 객체의 의미 있는 문자열 표현을 제공할 수 있습니다:
class Person {
String name;
int age;
Person(this.name, this.age);
@override
String toString() {
return 'Person(name: $name, age: $age)';
}
}
void main() {
var person = Person('Alice', 30);
print(person); // Person(name: Alice, 30)
}오버라이딩이 없으면, print(person)은 Instance of 'Person'을 출력할 것입니다. 오버라이딩을 사용하면, 객체의 상태에 대한 유용한 정보를 얻을 수 있습니다.
toString() 메서드는 Dart가 객체를 문자열로 변환해야 할 때마다 자동으로 호출됩니다 - print() 문, 문자열 보간(string interpolation) 또는 다른 문자열과 결합할 때 등입니다:
var message = 'User: $person'; // toString()이 자동으로 호출됨
print('Found: ' + person.toString()); // 명시적 호출잘 구현된 toString()은 개발 중에 객체 값을 빠르게 검사할 수 있게 함으로써 디버깅을 훨씬 쉽게 만들어 줍니다.
챌린지
쉬움출력 시 각 제품의 정보를 깔끔하고 읽기 쉬운 형식으로 표시하는 제품 카탈로그 시스템을 만들어 보겠습니다. toString() 메서드를 오버라이드하여 객체를 더 디버깅하기 쉽고 사용자 친화적으로 만드는 연습을 하게 됩니다.
코드는 두 개의 파일로 구성됩니다:
product.dart: 상점의 품목을 나타내는Product클래스를 생성합니다. 제품은name(String),price(double),quantity(int) 속성을 가져야 합니다.toString()메서드를 오버라이드하여 다음 형식과 정확히 일치하는 포맷된 문자열을 반환하도록 하세요:Product(name: [name], price: $[price], qty: [quantity])main.dart: 제품 파일을 임포트하고toString()오버라이드가 객체 출력을 얼마나 유용하게 만드는지 확인합니다. 세 개의 제품을 생성하고 출력하여 사용자 정의 문자열 표현이 작동하는지 확인하세요:- 이름이
'Laptop'이고 가격이999.99, 수량이5인 제품 - 이름이
'Mouse'이고 가격이29.5, 수량이50인 제품 - 이름이
'Keyboard'이고 가격이75.0, 수량이30인 제품
Featured: [product]형식으로 제품 중 하나를 포함하는 메시지를 출력함으로써 문자열 보간법(string interpolation)을 시연하세요.- 이름이
각 제품을 직접 출력할 때 도움이 되지 않는 Instance of 'Product' 메시지 대신 의미 있는 정보가 어떻게 표시되는지 확인해 보세요. toString() 메서드는 print() 문과 문자열 보간법을 사용할 때 자동으로 호출됩니다.
예상 출력:
Product(name: Laptop, price: $999.99, qty: 5)
Product(name: Mouse, price: $29.5, qty: 50)
Product(name: Keyboard, price: $75.0, qty: 30)
Featured: Product(name: Laptop, price: $999.99, qty: 5)치트 시트
기본적으로 Dart에서 객체를 출력하면 Instance of 'ClassName'이 표시됩니다. 의미 있는 문자열 표현을 제공하려면 toString() 메서드를 오버라이드하세요:
class Person {
String name;
int age;
Person(this.name, this.age);
@override
String toString() {
return 'Person(name: $name, age: $age)';
}
}toString() 메서드는 print() 문과 문자열 보간(string interpolation)에서 자동으로 호출됩니다:
var person = Person('Alice', 30);
print(person); // Person(name: Alice, age: 30)
var message = 'User: $person'; // toString()이 자동으로 호출됨직접 해보기
import 'product.dart';
void main() {
// TODO: 세 개의 Product 인스턴스를 생성하세요:
// 1. Laptop - price: 999.99, quantity: 5
// 2. Mouse - price: 29.5, quantity: 50
// 3. Keyboard - price: 75.0, quantity: 30
// TODO: 각 제품을 출력하세요 (toString()이 자동으로 호출됩니다)
// TODO: 문자열 보간법(string interpolation)을 사용하여 추천 메시지를 출력하세요
// 형식: Featured: [laptop product]
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.