Dart-Class(1)

이선행·2024년 3월 13일

CLASS 기본 생성 방법

void main() {
  Idol bigBang = Idol();
  bigBang.introduce();
}
class Idol{
  String name = '빅뱅';
  List<String> members = ['GD', 'TOP', '대성', '승리'];
  
  introduce(){
      for(String member in members){
        print('안녕하세요 $member 입니다.');
      }
  }
}

class 생성 방법은 위와 같이 class 클래스명 {}으로 생성하고 {} 내부에 변수, 함수를 지정할 수 있다.
하지만 위와 같은 방법으로 class를 생성한다면 아이돌이라는 클래스에 빅뱅 이외의 아이돌은 만들 수 없다.
이런 문제를 해결하려면 constructor(생성자)를 작성해주면 된다

constructor(생성자)-기본

void main() {
  Idol aespa = Idol(
  '에스파',
   ['카리나', '윈터', '지젤', '닝닝']
  );
  aespa.introduce();
}

class Idol {
  String name;
  List<String> members;

  Idol(String name, List<String> members)
    : this.name = name,
      this.members = members;
  
  introduce() {
    for (String member in this.members) {
      print('안녕하세요 $member 입니다.');
    }
  }
}

달라진 코드만 뺴서 보자

  Idol(String name, List<String> members)
    : this.name = name,
      this.members = members;

이렇게 constructor를 작성하면 Idol class를 선언할떄 name과 members를 파라미터로 받아와서 클래스 내부의 name과 members에 대입하겠다는 의미이다.
이렇게 class를 작성하면 Idol class는 하나의 설계도로서 여러 아이돌의 정보를 담을 수 있게 된다.

간소화

위처럼 생성자를 작성해도 되지만 더 간단하게 생성자를 작성하는 방법이 개발되었다.

Idol(this.name, this.members);

이렇게 작성하면 된다.

constructor(생성자)-named

void main() {
  Idol aespa = Idol.fromList(
    [
      ['카리나', '윈터', '지젤', '닝닝'],
      '에스파'
    ]
  );
  aespa.introduce();
}

class Idol {
  String name;
  List<String> members;

  Idol(this.name, this.members);
  Idol.fromList(List<dynamic> value) : this.members = value[0], this.name = value[1];
  introduce() {
    for (String member in this.members) {
      print('안녕하세요 $member 입니다.');
    }
  }
}

앞에서는 기본적인 생성자 생성 방법이었고 이번엔 이런 방법도 있다는 느낌으로 적어본다

Idol.fromList(List<dynamic> value) : this.members = value[0], this.name = value[1];

이렇게 함수형으로 constructor를 작성해서 변수를 받아올 수 있다.

final-immutable 프로그래밍

void main() {
  Idol aespa = Idol(
  '에스파',
   ['카리나', '윈터', '지젤', '닝닝']
  );
  aespa.introduce();
}

class Idol {
  final String name;
  final List<String> members;

  Idol(this.name, this.members);
  
  introduce() {
    for (String member in this.members) {
      print('안녕하세요 $member 입니다.');
    }
  }
}

한번 클래스를 생성하고 난 후 name, members같은 정보들이 바뀌지 않게 개발하는것을 선호한다
그럴때 변수타입 앞에 final을 붙여주면 한번 constructor로 class를 생성하고 난 후 변수를 바꿀수 없게 된다.

0개의 댓글