본문 바로가기
Dart, Flutter for App

Dart - Class, Abstract Class, and Interface

by Oliver J 2023. 11. 29.
반응형

Dart 언어 역시 객체 지향 언어이고, 모든 클래스는 Object 클래스의 자식입니다. 

 

클래스는 멤버 변수와 멤버 함수를 가질 수 있으며, 하나의 설계도나 템플릿으로서 인스턴스화(클래스가 컴퓨터의 메모리에 올라가는 것) 되어 생성된 객체들을 목적에 맞게 활용이 가능합니다. 

// Person 클래스
class Person{
  var name; // 멤버변수
  var age;

  // 생성자
  Person(this.name, this.age);

  // 멤버 함수
  void printInfo(){
    print('name : $name, age : $age');
  }
}

 

 

그리고 아래와 같이 다른 클래스를 상속받거나 확장함으로써, 기존 코드의 확장/오버라이딩/중복 코드를 줄임으로써 효율적인 프로그래밍을 할 수 있습니다.

class IronMan {
  String name;
  int powerLevel;

  IronMan(this.name, this.powerLevel);

  void shoot() {
    print('$name is shooting guns!');
  }
}

class IronManMK3 extends IronMan {
  int? flyheight;

  IronManMK3(String name, int powerLevel, this.flyheight): super(name, powerLevel);

  @override
  void shoot() {
    print('$name is shooting Laser!');
  }

  void fly() {
    print('$name is flying in $flyheight');
  }
}

 

그리고 다트 언어에도 추상 클래스와 인터페이스가 있습니다. 추상 클래스와 인터페이스의 공통점으로는 추상 클래스를 확장하거나 인터페이스를 구현할 경우, 확장 또는 구현하는 클래스에서 기존에 추상 클래스와 인터페이스에서 정의한 메서드들의 미구현 부분을 강제로 구현해야만 하도록 만드는 강제성을 줄 수 있습니다.

abstract class IronMan {
  var name;
  var suitColor;

  IronMan(this.name, this.suitColor);

  // Below are abstract methods. It must be implemented by subclasses.
  void fly();
  void shootLasers();
  void withstandDamage();
}

 

위와 같이 추상 메소드를 포함하고 있는 클래스가 추상 클래스입니다. 따라서, 추상 클래스는 인스턴스화가 불가능하며, extends 하여 구현을 한 다음에 인스턴스화하여 객체로서 활용이 가능해집니다. 그리고 미수현 메소드를 구현할 때에는 @override를 추가해줘야 합니다.

//@override 구문을 사용하여 abstract method 구현
class Mark50 extends IronMan {

  Mark50(String name, String suitColor) : super(name, suitColor);

  @override
  void fly() {
    print('$name is flying');
  }

  @override
  void shootLasers() {
    print('$name is shoot laser');
  }

  @override
  void withstandDamage() {
    print('$name is make huge Damage!');
  }
}

 

 

반응형

 

Dart 언어에서 인터페이스는 아래와 같이 명시적으로 사용되는게 아닌 암시적으로 사용합니다. 

class AnimalInterface{
  String kind;
  void run(){}
}

 

구현이 필요할 경우 암시적으로 정의된 인터페이스를 클래스에서 구현하면 됩니다. 

class Animal implements AnimalInterface{...}

 

 

간단?하게 Class, 추상 클래스, 인터페이스를 설명해 보았습니다.

 

특히 추상 클래스나 인터페이스의 경우, 프로젝트가 클 경우 또는 설계 수준 레벨에서 많이 활용되다 보니, 개발자로서 실제로 추상 클래스나 인터페이스를 활용하기까지 시간이 많이 소요되거나 몇 년을 일해도 접하지 못하는 분들도 있었습니다.

 

그래도 개념 이해는 확실히 해두어야겠죠?

 

728x90
반응형