Dart언어 기초 정리 2

밥이·2022년 5월 9일
0

Dart언어

목록 보기
2/4

Class, Object, constructor, getter, setter 정리

void main() {
  // instanece 인스턴스 : object(객체) 생성
  // (쉽게 말해 class안에 있는 변수와 함수를 활용할려면 instanece가 필요하다.)

  // ↓인스턴스한 변수
  Student girlStudent = Student('민지', 20);
  girlStudent.printInfo();

  // .을 통해 Student클래스 안에 변수 호출, 객체안 변수 재할당
  girlStudent.name = '둘리';
  girlStudent.age = 24;
  girlStudent.printInfo();

  // 인스턴스를 하는 동시에 즉, 생성자 초기값을 해준 동시에 값을 할당해 줄 수 있다.
  Student2 boyStudent = Student2(
    name: '철수',
    age: 23,
  );
  boyStudent.printInfo2();

  // =====================================
  Student3 etcStudent = Student3(
    name: '훈이',
    age: 25,
  );
  etcStudent.printInfo3();

  // ↓기존에 작성하던 코드(생성자)가 있던 말던 그냥 재할당함
  etcStudent.name = '맹구';
  etcStudent.age = 22;
  etcStudent.printInfo3();

  // =====================================
  Student4 etcStudent2 = Student4(
    name: '유리',
    age: 26,
  );
  etcStudent2.printInfo4();

  // 어떠한 값을 재할당 할때 뒤에 무조건 '학생'을 붙이고 싶을때
  etcStudent2.name = '짱구';
  print('main = ${etcStudent2.name} (getter로 가져온 값)');

  etcStudent2.age = 22;
  etcStudent2.printInfo4();
}

// Class(클래스) : 객체지향프로그래밍(OOP)에서 특정 object(객체)를 생성하기 위해 정의하는 일종의 틀.
// - class는 변수와 함수를 정의할 수 있습니다.
// - 비슷한 성격을 가진 연관있는 변수와 함수들을 한 class에 정의합니다.

// 작성법 : class 클래스명 {}
// 클래스명은 첫글자는 대문자로 작성

class Student {
  // 생성자 constructor
  // Student(); -> 생성자

  // 인스턴스에서 보낸값 받기
  // Student(String myName, int myAge) {
  //   name = myName;
  //   age = myAge;
  // }

  // 여기서의 this.name는 class Student안에 있는 name을 가르킴
  // 하지만 이건 잘못된 작성법
  // Student(String name, int age) {
  //   this.name = name;
  //   this.age = age;
  // }

  // 이렇게 작성하라고 권장
  // 인스턴스한 변수에서 값을 보낸걸 받아서, class Student 안에 있는 변수값을 변경해줌
  Student(this.name, this.age);

  // 디폴트 값 생성
  String name = '길동';
  int? age;

  void printInfo() {
    print('------');
    print('name : $name');
    print('age : $age');
    print('------');
  }
}

class Student2 {
  // String name의 변수타입이 non-nullable타입임 : null값이 허용되지 않는 타입
  // String값이 있어야 하기때문에 required를 붙여줘서 name값이 무조건 할당될 수 있도록 설정
  Student2({required this.name, this.age});

  String name;
  int? age;

  void printInfo2() {
    print('------');
    print('name : $name');
    print('age : $age');
    print('------');
  }
}

class Student3 {
  // 초기값을 변경해주고 싶을 때
  // 생성자 일때만 변경됨
  Student3({required String name, this.age}) : name = '$name 학생';

  String name;
  int? age;

  void printInfo3() {
    print('------');
    print('name : $name');
    print('age : $age');
    print('------');
  }
}

class Student4 {
  // 초기값을 변경해주고 싶을 때
  // 생성자 일때만 변경됨
  Student4({required String name, this.age}) : _name = '$name 학생';

  // private한 변수 : 접근을 제한 (숨겨놓음)
  String _name;

  // public한 변수 : 모두 접근가능
  int? age;

  // Setter 만들기
  // setter만 외부에서 받을꺼고(값 설정은 외부에서 하고)
  // getter는 안돼 (값을 가져가는건 안돼)
  //         ↓ Setter는 여기가 타입이 결정되는부분(값을 가져오니까)
  set name(String value) {
    _name = '$value 학생';
  }

  // 값을 가져갈려면 getter 설정
  // getter이기 때문에 input요소가 없어서 ()는 빼고 실행문만 작성
  // String get name {
  //   print('getter $_name');
  //   return _name; // -> getter는 여기가 타입이 결정되는부분(값을 반환하니까)
  // }

  // getter를 할때 값을 반환하는거 밖에 없을때 작성
  String get name => _name; // return _name이랑 같음

  void printInfo4() {
    print('------');
    print('name : $_name');
    print('age : $age');
    print('------');
  }
}

참고
https://stealth-mandarin-b2b.notion.site/CH02-ed3a2177e2124f26a6454b7418ab2381

0개의 댓글