본문 바로가기
App

[For Flutter] Dart 기본문법 #4 Class

by nothing-error 2023. 2. 13.

#Dart 가 설치되어 있지 않을 경우 https://dartpad.dev/ 에서 편하게 실행해볼 수 있습니다.

 

Class

클래스는 아래와 같이 생성하실 수 있습니다. 

Player 이라는 클래스이며, name 과 xp 라는 변수를 갖고 있습니다. name 경우 final을 붙여서 변경할 수 없도록 하였습니다. 클래스 안에는 sayhello 라는 메서드가 있으며 단순히 출력만 담당합니다. 이 클래스를 사용할 경우에는 main 함수 안에서 사용하면 되고, player 라는 인스턴스를 생성한 다음에 사용할 수 있습니다.(제 기준 파이썬이랑 거의 동일하네요)

 

1. 생성자

dart에서 생성자는 아래와 같이 만들 수 있습니다. 클래스 안에 Player 라는 클래스도 동일한 이름의 함수를 만들어 줍니다. 이때 this 를 사용해줍니다( 파이썬에서는 __init__ 함수이며, this 는 self 를 의미하는 것으로 보입니다) late의 경우 나중에 변수에 같이 할당되어야 하는 경우에 사용하게 됩니다.

 

위의 코드를 아래와 같이 조금 더 간결한 방법으로 작성할수도 있습니다. late 를 제거하였고, Player라는 함수에서는  바로 위에서 각 인자의 타입은 명시해줬기 때문에 다시 입력할 필요가 없이 dart에서 인식을 하게됩니다.

 

2. Named constructor parameter

위의 코드에서는  name, xp 두가지만 필요해서 문제는 없지만 만약, 인스턴스를 생성할 때 필요한 값이 여러개일 경우에는 코드의 가독성이 떨어질 수 있습니다. 따라서 아래와 같이 조금 더 명확하게 표현할 수 있습니다.

 

3. Named constructor

: 를 통해서 Player를 초기화할 수 있습니다. Player.createRedPlayer 부분을 보면 name 과 xp 만 새롭게 인자로 받게하고 나머지 color나 jop은 red 와 thief 로 명시해줄 수 있습니다. 이때 : 를 사용하게 됩니다. 

class Player {
  final String name;
  int xp;
  String color, jop;

    
  Player({required this.name, 
          required this.xp, 
          required this.color, 
          required this.jop,
         });
  
  Player.createRedPlayer({
    required String name,
    required int xp}) 
    :  this.name = name,
       this.xp = xp,
       this.color = 'red',
       this.jop = 'thief';
 
}



void main() {
  var player = Player(
    name: 'dahy' , 
    xp: 1000,
    color: 'red',
    jop: 'theif',
 
  
  );
  print(player.name);
  print(player.xp);
  print(player.color);
  print(player.jop);
  
  var player_red = Player.createRedPlayer(
    name: 'big',
    xp: 10000
  );
  print('--------------');
  print(player_red.name);
  print(player_red.xp);
  print(player_red.color);
  print(player_red.jop);
}

 

 

만약, 앱을 만들때 API를 사용해서 데이터를 받아오는 경우 아래와 같이 작성해볼 수 있습니다

위의 코드에서 apiData 에는 api에서 받아온 json 타입의 임의의 데이터가 있습니다.  fromJson 이라는 Named constructor를 사용해서 'playerJson' 라는 json 구조의 데이터를 받아 초기화 합니다. 다음 main 함수에서 반복문을 통해서 apiData의 name 부분만 출력합니다.( 지금까지 배운 것 중에서 가장 어려웠던 부분이라 강의를 한 번 더 돌려봤네요)

 

 

4. enum

enum은 개발자의 실수를 줄여줄 수 있는 매우 유용한 기능입니다. 아래 코드 최상단처럼 enum을 입력하고 이름과 그 요소들을 작성하면 됩니다. 다음으로 클래스에서 변수의 타입을 지정할 때 enum의 이름을 넣어주고 이후에 사용할 때마다 enum의 이름 뒤에 닷( . )을 적어주면 이후 자동완성 목록을 통해서 선택할 수 있기에 흔한 오타로 발생하는 에러를 방지할 수 있습니다.

 

 

5. 상속

super는 부모클래스의 프로퍼티에 접근하게 하거나 메소드를 호출할 수 있게 해줍니다.

 

@override 를 사용하면 부모클래스에서 만든 sayHello 함수가 아닌 직접 정의한 sayHello 함수를 사용할 수 있습니다.

아래 코드는 부모클래스의 sayHello함수에 프린트 하는 코드를 추가하였습니다.

 

 

6. Mixins

mixin은 생성자가 없는 클래스를 의미합니다. 이를 사용할 때에는 with와 함께 사용하면 됩니다.

아래 코드는 Player 라는 클래스에 QuickRunner, Strong 클래스의 프로퍼티와 함수를 담은 다음에 main 함수에서 Player 함수의 인스턴스를 생성하고 player. 을 통해서 runquick 과 strength를 사용할 수 있습니다.

 

 

 

 


2023.02.12 - [App] - [For Flutter] Dart 기본문법 #1 변수

2023.02.13 - [App] - [For Flutter] Dart 기본문법 #2 자료구조

2023.02.13 - [App] - [For Flutter] Dart 기본문법 #3 함수

2023.02.13 - [App] - [For Flutter] Dart 기본문법 #4 Class

 

 

 

이 글은 '노마드코더'의 Flutter 앱 개발을 위한 Dart 배우기 강의를 바탕으로 작성됐습니다.

아래 링크를 통해서 무료로 수강할 수 있습니다.(개인적으로 유튜브에 올라와 있는 다른 무료 강의보다 훨씬 이해하기 쉽게 알려줘서 개념 잡는데 큰 도움이 됐습니다)

https://nomadcoders.co/dart-for-beginners

댓글