[TIL] Dart-변수, class 선언 및 사용

link717·2021년 7월 19일
0

TIL

목록 보기
41/53
post-thumbnail

🌼 변수 선언 및 사용

  • const : compile시, 값이 할당되어 있어야 한다.

  • final : runtime시, 값을 할당해도 된다.

    . 값이 할당되면 바꿀 수 없다는 것은 동일하다.
    . 일반적으로 final을 더 많이 쓴다.

// const는 compile시 값이 할당되어 있어야 하므로 아래 코드는 실행 전 에러가 발생한다.
// Error: Cannot invoke a non-'const' constructor where a const expression is expected.
void main() {
  const DateTime now = DateTime.now();
  print(now);

  Future.delayed(
    Duration(milliseconds: 1000),
    () {
       const  DateTime now2 = DateTime.now();
    }
  );
}

// const 대신 final로 변수를 선언하여 사용하면 문제없이 실행된다.
  • static: instance에 귀속되지 않고 class에 통째로 귀속되는 변수에 사용한다.
void main() {
  //Static keyword
  Employee seulgi = new Employee('슬기');
  Employee chorong = new Employee('초롱');

  seulgi.printNameAndBuilding();
  chorong.printNameAndBuilding();
  
  //building은 static keyword로 선언되어 있어서 class에 바로 접근해서 값을 할당할 수 있다.
  Employee.building = '여의도 위워크';
  
  seulgi.printNameAndBuilding();
  chorong.printNameAndBuilding();
  
  Employee.building = '을지로 위워크';
  
  seulgi.printNameAndBuilding();
  chorong.printNameAndBuilding();
}

class Employee {
  //직원: 모든 직원이 같거나 다른 값을 가짐 (final)
  //건물: 모든 직원이 같은 값을 가짐 (static)
  static String? building;
  String name;
  
  Employee(name) : this.name = name;
  
  void printNameAndBuilding() {
    print('제 이름은 ${this.name}입니다. ${building} 건물에서 근무하고 있습니다.');
  }
}

🌼 class 선언 및 사용

  • class란 비슷한 성격 혹은 기능의 변수, 함수 등을 모아둔 것이다.
  • class를 선언할때는 이름은 무조건 대문자로 시작해야 한다.
  • constructor를 생성하는 방법은 2가지가 있다.
    . make constructor using the named parameters.
    . make constructor using the named constructor (constructor overloading)
void main() {
  //OOP - Objected Oriented Programming
  //객체지향 프로그래밍
  
  //Instantiation 인스턴스화 과정, 여기서 redVelvet은 새로 생성된 Instance이다.
  //named parameter는 순서가 바뀌어도 상관이 없다.  
  Idol redVelvet = new Idol(group: '레드벨벳', name: '슬기');
  redVelvet.sayName();
  print(redVelvet.name);
  
  //seulgi.name = '코드팩토리'
  //print(seulgi.name); final로 선언되지 않았다면 코드팩토리가 결과값으로 뜬다.
  
  Idol bts = new Idol.fromMap({
    'name': 'rm',
    'group': 'bts',
  });
  bts.sayName();
}

class Idol {
  final String name;
  final String group;
  
  //1번 방법
  Idol({name,  group}) : this.name = name, this.group = group;
  
  void sayName() {
    print('제 이름은 ${this.name}입니다.');
  }
  
//2번 방법
  Idol.fromMap(Map input) : this.name = input['name'], this.group = input['group'];
}

출처:YOUTUBE-코드팩토리

profile
Turtle Never stop

0개의 댓글