Class를 만들어 줄때는 무조건 대문자로 작성!
class는 제작서(레시피), 설계도 같은 것
클래스를 통해 생성된 결과물
하나의 클래스로 여러개의 결과물을 만들 수 있다.
예시
Class => 차
Object => 차 모델(Bmw, Audi...)
var dio = Dio(); //Dio라는 레시피를 이용하여 객체를 생성하여 dio라는 변수에 넣었다 var imagePicker = ImagePicker(); //ImagePicker 라는 레시피를 이용하여 객체를 생성하여 imagePicker라는 변수에 넣었다
여러 객체를 만들 수 있다.
var dioInternalApi = Dio(); //내부API만 사용할 dio객체를 만들어야겠다. var dioExternalApi = Dio(); //외부API만 사용할 dio객체를 만들어야겠다. var dioPrivateApi = Dio(); //그냥 편하게 사용할때 쓰는 객체를 만들어야겠다.
그리고 String, int, double, bool, DateTime, Widget등 모든 데이터 타입도 다 Class로 만들어져있다.
현실세계에 잇는 무언가를 프로그래밍으로 구현한다는 것을 객체지향
이라고 한다.
class Human{ String name; int money; int age; double height; mbti; }
Class
Human Class { String name; int money; int age; double height; MBTI mbti; Human? girlfriend; Human? boyfriend; List<Human>? relations; }
클래스의 종류
멤버변수
멤버함수
생성자
- 이름없는 생성자
class User { //멤버변수 String name; //이름 없는 생성자함수 User(this.name); } void main() { var user1 = User('이테디'); //생성자를 통한 객체생성 및 변수에 할당 var user2 = User('홍길동'); print(user1.name); //이테디가 결과로 나온다. }
this는 나의 변수명이다.
생성자 함수가 this라는 키워드를 사용할 수 잇어서 dio.get()
myDio.get()
dfdkfdjf.get()
아무렇게나 써도 쓸 수 있다.
- 이름있는 생성자(Named constructor)
class User { //멤버변수 String name; //이름있는 생성함수 User.withName(String inputNmae) : name = inputNmae; User.withAnonymous() : name = "Anony"; } void main() { var user = User.withAnonymous(); print(user.name); }
익명으로 로그인 했을때 User.withAnonymous() : name = "Anony"
이런 방법을 써서 사용할 수 있다.
void main() { User.withName(name: '이테디', phone: '010-1000-2000'); User.withName(name: '이테디', phone: '010-1000-2000'); } class User { //멤버변수 String name; String phone; //이름있는 생성함수 User.withName({required String name,required String phone}) : name = name, phone = phone; }
required 키워드를 꼭 써줘야하는데 무조건 값이 들어와야한다 라는 의미이다.
왜냐 name에는 String이 들어와야하는데 "선택"을 안하고 매개변수를 입력하지 않으면 null이기 때문이다.
class User { String userId; String nickname; String password; List<User> friend; User(this.userId, this.nickname, this.password, this.friend); } void main() { var user1 = User("jijiji", "god", "*****", []); print(user1); print(user1.nickname); print(user1.password); print(user1.friend); }
List를 쓸때는 []이렇게 나타내줘야한다.
결과:
class User { String userId; String nickname; String password; List<User> friend; User(this.userId, this.nickname, this.password, this.friend); } void main() { var user1 = User("jijiji", "god", "*****", []); print(user1); print(user1.nickname); print(user1.password); print(user1.friend); user1.nickname = "kinggod"; print(user1.nickname); }
이렇게 nickname을 바꿀 수 도 있다.
class User {
String userId;
String nickname;
String password;
List<User> friend;
User(this.userId, this.nickname, this.password, this.friend) {
print("${this.nickname}을 생성하겠습니다");
}
User.createUser( String nickname, String password)
: userId = 'newUserID',
nickname = nickname,
password = password,
friend = [];
friendAdd(User user) {
friend.add(user);
}
}
void main() {
var originUser = User("dkdkdk","jenny", "*****", []);
}
print("${this.nickname}을 생성하겠습니다")
이런식으로 써도 똑같은 결과 값이 나온다.
class Human {
String? name;
int? money;
int? age;
double? height;
Human? girlfriend;
Human? boyfriend;
List<Human>? friends;
Human(this.name, this.money, this.age, this.height, this.girlfriend,
this.boyfriend, this.friends);
//멤버 함수
eat(String foodName) {
print("와구와구 $foodName 먹어야지");
height += 0.3;
}
workout(int hours) {
print("운동해야지 $hours 동안");
height -= hours *0.5;
}
getMoney(String amount) {
cash += amount;
}
spendMoney(String amount) {
cash += amount;
}
}