[Flutter] Class, Constructor, Method

wjdguseya_0880·2024년 1월 18일
0

Class

  • Class를 만들어 줄때는 무조건 대문자로 작성!

  • class는 제작서(레시피), 설계도 같은 것

  • 클래스를 통해 생성된 결과물

    • 객체(Object) or 인스턴스(Instance)
  • 하나의 클래스로 여러개의 결과물을 만들 수 있다.


예시
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;
}

Constructor(클래스 생성자)

  • 객체를 생성해주는 핵심 함수, 생성자함수 라고 함
  • 생성자가 없으면 객체를 생성해서 변수에 넣어주지 못함.
    • var dio = Dio();
  • 클래스명을 넣고 필수 멤버 변수를 괄호안에 다 넣어주면 된다.
    • Dio는 기본값이 미리 들어가 있어서 따로 안넣어줘도 됨.

Class

Human Class {
	String name;
    int money;
    int age;
    double height;
    MBTI mbti;
    Human? girlfriend;
    Human? boyfriend;
    List<Human>? relations;
}

클래스의 종류

  • 멤버변수

    • 클래스 객체 내에서 사용할 수 있는 함수들
      -> dio에서는 .options
  • 멤버함수

    • 클래스 객체 내에서 사용할 수 있는 함수들
      -> dio에서는 .get, .post등 실행 가능한 형태들
  • 생성자

    • 객체를 생성할 수 있는 생성함수
      -> var dio = Dio();
  1. 이름없는 생성자
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()아무렇게나 써도 쓸 수 있다.

  1. 이름있는 생성자(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에 정의해둔 레시피대로 만들어야하기 때문에, 변수를 다 채워야한다.
    • this.의 뜻은 나중에 변수가 들어갈 공간
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;
 }
}    
profile
플러터 공부 기록일지

0개의 댓글