본문 바로가기
버킷리스트/앱 만들기

오공완(풀스택 개발이 쉬워지는 다트&플러터) #C Dart 언어 심화 이해-2, 3

by 또또도전 2025. 1. 8.
반응형

// 이곳에 쓴 내용은 앱 만들기라는 버킷리스트를 달성하기 위해 플러터를 공부하면서 정리하고 있는 내용입니다.

플러터에 대해 아는 것이 거의 없기 때문에 정리하면서 오류가 있을 수 있습니다.

오류를 발견하신 분은 댓글 남겨 주시면 감사하겠습니다.

 

 

  mixin

 

  - 클래스의 일종

  - 다른 클래스의 부속품으로 사용되는 클래스

  - with를 사용하여 사용 가능

  - 자주 사용할 만한 기능들을 mixin으로 만들어 놓은 후, with를 활용하면 클래스의 개발이 보다 빨라지게 된다고 함.

 

class Integer { 
  late int _value; 
  
  Integer([int givenValue = 0]) { 
    _value = givenValue;
  }

  int get() {
    return _value;
  }  
    
  void set(int givenValue) {
    _value = givenValue;
  }
  
  String get asString => "$_value";

  set value(int givenValue) => _value = givenValue;
  
  Integer operator +(Integer givenValue) {
    return Integer(_value + givenValue.get());
  }
}

mixin ActivationFlag {
  bool _flag = true;
  
  bool get activated => _flag;
  set activated(bool givenFlag) => ( _flag = givenFlag);
}

class TimemachineInteger extends Integer with ActivationFlag {
  List<int> _timemachine = [];
  
  TimemachineInteger([int givenValue = 0]) { 
    _value = givenValue;
  }
  
  @override
  void set(int givenValue) {
    if (activated == true) {
      _timemachine.add(_value);
      print("set($givenValue) called ==> _timemachine is $_timemachine");
    } else {
      print("set($givenValue) called ==> current $_value is ignored.");
    }
      
    super.set(givenValue);
  }
  
  List getOld() {
    return _timemachine;
  }
  
  @override
  String get asString => "$_value, previously $_timemachine";
}

void main() {
  var tmpTmInteger = TimemachineInteger(0);
  tmpTmInteger.set(2);
  tmpTmInteger.set(4);
  tmpTmInteger.activated = false;
  tmpTmInteger.set(6);
  tmpTmInteger.activated = true;
  tmpTmInteger.set(8);
  print("${tmpTmInteger.asString}");
}

 

  추상 클래스(abstract class)

 

  - 추상 클래스는 부모 클래스의 개념, 객체를 만들지 않고, 개념만 만들어 놓고, 자식들이 구체화하여 객체를 만들도록 하는 기능 (요건 내가 이해한 방식임.)

  - abstract(객체를 만들 수 없는 클래스라는 의미),

  - implements(자식 개념 클래스로 extends 대신에 implements를 사용)

 

궁금한 게 생겼다. 작성하다 보니 추상클래스에서 정의한 내용을 derived 클래스에서 똑같이 정의할 거라면 굳이 추상 클래스를 왜 만드는지 이해가 안 간다. 자식 클래스에서 모두 정의할 건데 추상 클래스를 쓰는 이유가 뭘까?

 

note(이 책에서는 팁 정도의 개념)에 보면 extends 문법이 더 편해 보리 수 있지만 추상 클래스를 사용하는 경우는 가급적 implements 문법을 사용하도록 권장한단다. 개발자들의 생각은 내가 접근할 수 없는 추상적인 무엇인가 보다.   

 

오늘도 어렵지만 꾸역꾸역 왔다. setter, getter 개념도 헷갈린데.. 책보다는 유튜브가 낫나..?

암튼, 클래스 챕터까지는 꾸역꾸역 먹어보자. 

반응형