반응형
* 해당 글은 '나무위키'와 책 '내일은 플러터'의 내용을 요약 정리 하였습니다.
클래스 Class
// class + 클래스명 {}
class Person {
// 변수의 속성을 선언
// 초기값을 정하지 않으면 타입뒤에 ? 넣어준다.
// 혹은 late를 앞에 쓰면, 인스턴스가 생성된 후에 값을 할당 할 수 있다.
String? name;
late int age;
// 생성자 선언 required 선언하면 class를 불러올때 꼭 값을 넣어줘야한다.
Person(String name, int age) {
this.name = name;
this.age = age;
}
// 클래스 메소드
void sayHello() {
print("Hello, my name is $name and I'm $age years old.");
}
}
// output
// Hello, my name is Kim and I'm 22 years old.
// 일부 책들에선 인스턴스 생성시 초기값을 지정하지 않거나,
// late 혹은 ? 를 적용하지 않은데 dart 최신버전에선 그러면 코드가 돌아가지 않는다.
// String band; X late String brand; O String? brand; O
class Car {
// String name; 실행안됨
late String brand;
int? price;
}
void main() {
Car car1 = Car();
car1.brand = 'Tesla';
car1.price = 5000;
Car car2 = Car();
car2.brand = 'BMW';
car2.price = 5000;
print("Car 1: ${car1.brand}, ${car1.price} dallars");
print("Car 2: ${car2.brand}, ${car2.price} dallars");
}
// output
// Car 1: Tesla, 5000 dallars
// Car 2: BMW, 5000 dallars
메서드 Method
- 메서드는 클래스의 기능과 동작을 구현하는데 사용
- 클래스는 메서드를 사용하여 특정 동작을 정의, 해당 동작을 여러번 호출 할 수 있다.
- 메서드는 클래스의 내부에 저장되며 이름, 매개변수, 반환 값 등을 가질 수 있다.
- 객체가 가지고 있는 데이터나 상태를 변환하거나 변경 할 수 있다.
// 메소드 기본형태
// void는 반환 값이 없는 리턴타입
// returnType methodName(parameters) {
// // method body
// }
late 연산자
- late 연산자를 사용하여 선언된 변수는 선언 시점에 초기 값을 할당하지 않아도 된다. 대신, 변수를 사용하기 전에 반드시 초기화해야 한다.
- late 연산자를 사용하는 변수는 Non-nullable 타입
cascade 연산자 ..
- 객체의 연속적인 작업을 처리하기 위해 사용되는 특수한 연산자로 ".." 이중 점 기호로 표시.
- 객체의 메소드나 속성에 연속적으로 접근하거나 설정하는 작업을 한 줄로 표현
- 동일한 객체에 대해 여러 개의 작업을 연속적으로 수행
- 코드가 간결하고 가독성이 높아짐
- 객체 초기화에서는 사용할 수 없다.
class Product {
String? name;
int? quantity;
Product(this.name, this.quantity);
void printDetails() {
print("Product: $name, Quantity: $quantity");
}
}
class Order {
List<Product> products = [];
// 반환타입이 Order로 되어 있어야 cascade를 사용할 수 있다.
Order addProduct(String name, int quantity) {
var product = Product(name, quantity);
products.add(product);
return this;
}
void printOrderDetails() {
print('Order Details:');
for (var product in products) {
product.printDetails();
}
}
}
// cascade 연산자로 메서드 체이닝 구현
void main() {
var order = Order()
..addProduct('Apple', 2)
..addProduct('Banana', 3);
// printOrderDetails 의 반환 타입은 void인데도 된다? 왜지?
order.addProduct('Orange', 1)..printOrderDetails();
}
/* output
Order Details:
Product: Apple, Quantity: 2
Product: Banana, Quantity: 3
Product: Orange, Quantity: 1
*/
'Code > Flutter' 카테고리의 다른 글
dart null safty (6) | 2024.09.02 |
---|---|
dart 객체, 클래스, 인스턴스 (1) | 2024.09.02 |
Dart 리스트, 맵 (1) | 2023.10.09 |
Dart 반복문, 함수, 전역변수 (1) | 2023.10.08 |
Dart 변수와 타입, 연산자, 제어문, 조건문 (0) | 2023.10.07 |