일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 一日一つメソッド
- nico
- 건담
- 일본어
- 인프런
- 비즈니스일본어
- メソッド
- 単語
- 日本語
- java
- Flutter
- Python
- 자바
- javascript
- 반다이몰
- DART
- Web
- C로 시작하는 컴퓨터 프로그래밍4판
- vscode
- rails
- 연습문제
- ruby
- rails7
- html
- Spring
- 건담베이스
- 디지몬
- CSS
- jsp
- springboot
- Today
- Total
AR삽질러
Dart Class - (6) 본문
Dart Class
Class는 객체지향프로그래밍(OOP)에서 핵심적인 개념으로 데이터와 해당 데이터를 조작하는 함수를 하나로 묶어 표현하는 방법이다. Class는 동일한 Class로 생성된 Object(객체)객체들은 클래스의 맴버변수와 메서드를 공유한다. |
- Function에서 Variable을 사용할때 var를 사용하면 타입을 명시할 필요가 없었지만
- Class에서는 property를 선언할때 반드 타입을 사용해 정의한다.
0. Class Definition(클래스 정의)
class Intro {
String name = '아랑';
int age = 25;
}
void main() {
var intro = new Intro();
print(intro.name); // 아랑
intro.name = '랑랑';
print(intro.name); // 랑랑
}
- Class를 정의할때는 앞에 'class' 키워드를 사용한다.
- Class 내부에는 맴버변수와 메서드를 정의할 수 있다.
정의된 Intro 클래스에는 name과 age 두개의 맴버 변수를 가지고 있다.
main()함수에서 Intro클래스의 인스턴스를 생성해 name을 출력한다.
class Intro {
final String name = '아랑';
int age = 25;
void sayHello() {
print("안녕하세요. 저의 이름은 $name 입니다.");
}
}
void main() {
var intro = new Intro();
intro.sayHello(); // 안녕하세요. 저의 이름은 아랑 입니다.
// intro.name = '랑랑';
// print(intro.name); // 랑랑
}
맴버변수앞에 final 키워드를 붙이게되면 더 이상 값을 수정할 수 없다.
void sayHello() 함수 : 클래스 내부에서 사용되는 함수로 "안녕하세요. 저의 이름은 ${name} 입니다." 를 출력하게 되는데 $name은 메서드에 속해있는 클래스의 name변수 값을 사용하게된다.
1. Constructors(생성자)
lage키워드사용
class Intro {
late String name;
late int age;
Intro(String name, int age) {
this.name = name;
this.age = age;
}
void sayHello() {
print("안녕하세요. 저의 이름은 $name이고 나이는 $age입니다.");
}
}
void main() {
var intro = Intro("아랑", 25);
intro.sayHello(); // 안녕하세요. 저의 이름은 아랑이고 나이는 25입니다.
var intro2 = Intro("아린", 16);
intro2.sayHello(); // 안녕하세요. 저의 이린이고 나이는 16입니다.
}
- Intro클래스 : name, age 맴버변수에 late키워드를 선언하여 나중에 값을 할당할 수 있도록 한다.
- Intro클래스 내부에 Introto생성자를 정의해 name, age를 받아 객체를 초기화 할 수 있도록 한고 this.name = name, this.age = age를 사용해 매개변수로 받은 값을 맴버 변수에 할달한다.
- sayHello() 메서드를 정의해 name, age가 지정된 자리에서 출력되도록한다.
late키워드를 사용하지 않고 생성자를 사용
class Intro {
String name;
int age;
Intro(this.name, this.age);
void sayHello() {
print("안녕하세요. 저의 이름은 $name이고 나이는 $age입니다.");
}
}
void main() {
var intro = Intro("아랑", 25);
intro.sayHello(); // 안녕하세요. 저의 이름은 아랑이고 나이는 25입니다.
var intro2 = Intro("아린", 16);
intro2.sayHello(); // 안녕하세요. 저의 이린이고 나이는 16입니다.
print(intro.name);
print(intro2.name);
}
- Intro클래스 정의 : name, age 맴버변수 선언후 late키워드를 사용하지 않고 Intro클래스에서 기본 생성자를 정의한다. name, age 맴버변수를 초기화하고 직접 name, age 변수를 초기화한다.
2. Named Constructor Parameters
class Intro {
String name;
int age;
String hobby;
int grade;
Intro(this.name, this.age, this.hobby, this.grade);
void sayHello() {
print("안녕하세요. 저의 이름은 $name이고 나이는 $age입니다. 그리고 취미는 $hobby이고 $grade학년입니다.");
}
}
void main() {
var intro = Intro("아랑", 25, "보드", 4);
intro.sayHello(); // 안녕하세요. 저의 이름은 아랑이고 나이는 25입니다. 그리고 취미는 보드이고 4학년입니다.
var intro2 = Intro("아린", 16, "농구", 6);
intro2.sayHello(); // 안녕하세요. 저의 이름은 아린이고 나이는 16입니다. 그리고 취미는 농구이고 6학년입니다.
}
- 이전 Constructor에서는 Function처럼 변수의 순서를 지켜줘야한다.
class Intro {
String name;
int age;
String hobby;
int grade;
Intro({this.name, this.age, this.hobby, this.grade});
void sayHello() {
print("안녕하세요. 저의 이름은 $name이고 나이는 $age입니다. 그리고 취미는 $hobby이고 $grade학년입니다.");
}
}
void main() {
var intro = Intro(
name: "아랑",
age: 25,
hobby: "보드",
grade: 4,
);
intro.sayHello(); // 안녕하세요. 저의 이름은 아랑이고 나이는 25입니다. 그리고 취미는 보드이고 4학년입니다.
}
- Named Parameters를 이용하여 클래스의 생성자를 정의
- { }중괄호를 이용해 Named Parameters를 사용하여 생성자를 호출할때 어떤값이 어떤 매개변수에 대응되는지 표현할 수 있다.
3. Named Constrictors
- Named Constrictors는 함수나 메서드를 호출 할때 매개변수의 이름을 지정해 전달하는 기능을 갖는다.
class Intro {
final String name;
int age, grade;
String hobby;
Intro({
required this.name,
required this.age,
required this.hobby,
required this.grade,
});
Intro.create1({required String name, required int age})
: this.age = age,
this.name = name,
this.hobby = '보드',
this.grade = 4;
Intro.create2({required String name, required int age})
: this.name = name,
this.age = age,
this.hobby = "농구",
this.grade = 6;
void sayHello() {
print("안녕하세요. 저의 이름은 $name이고 나이는 $age입니다. 그리고 취미는 $hobby이고 $grade학년입니다.");
}
}
void main() {
var intro = Intro.create1(
name: "아랑",
age: 25,
);
intro.sayHello();
var intro2 = Intro.create2(
name: "아린", // 안녕하세요. 저의 이름은 아랑이고 나이는 25입니다. 그리고 취미는 보드이고 4학년입니다.
age: 16,
);
intro2.sayHello(); // 안녕하세요. 저의 이름은 아린이고 나이는 16입니다. 그리고 취미는 보드이고 4학년입니다.
}
- Intro클래스의 생성자 : name, age, hobby, grade
create1 : name, age 매개변수를 필수로 받고 hobby와 grade는 초기값을 설정하여 값이 없을경우 기본값으로 설정한다.
create2 : name, age 매개변수를 필수로 받고 hobby와 grade는 초기값을 설정하여 값이 없을경우 기본값으로 설정한다.
클래스의 생성자를 활용해 JSON데이터 인스턴스생성과 메서드호출 예제
class Intro {
final String name;
int age;
String hobby;
Intro.fromJson(Map<String, dynamic> introJson)
: name = introJson['name'],
age = introJson['age'],
hobby = introJson['hobby'];
void sayHello() {
print("안녕하세요. 저는 $name이고 나이는 $age입니다. 그리고 취미는 $hobby입니다.");
}
}
void main() {
var apiDate = [
{
"name": "아랑",
"age": 25,
"hobby": "보드"
}, // 안녕하세요. 저는 아랑이고 나이는 25입니다. 그리고 취미는 보드입니다.
{
"name": "아린",
"age": 16,
"hobby": "농구"
}, // 안녕하세요. 저는 아린이고 나이는 16입니다. 그리고 취미는 농구입니다.
{
"name": "아리",
"age": 11,
"hobby": "스키"
}, // 안녕하세요. 저는 아리이고 나이는 11입니다. 그리고 취미는 스키입니다.
];
apiDate.forEach((introJson) {
var intro = Intro.fromJson(introJson);
intro.sayHello();
});
}
- Intro클래스 : final name, age, hobby 필드
- fromJson생성자 : JSON데이터를 받아 인스턴스를 초기화한뒤 JSON데이터는 각 필드의 인스턴스 맴버필드에 할당된다.
- main함수에서 apiData.foEach로 JSON 객체를 순회하여 Intro.sayHello()생성자를 호출해 출력한다.
'Dart' 카테고리의 다른 글
Dart 기초 - Dart와 Flutter (0) (0) | 2024.04.24 |
---|---|
Dart Class2 - (7) (0) | 2023.09.08 |
Dart Typedef - (5) (0) | 2023.09.02 |
Dart Functions - (4) (0) | 2023.09.02 |
Dart DataTypes - (3) (2) | 2023.08.28 |