본문 바로가기
프로그램 개발해서 돈벌기/flutter

[flutter] abstract class는 무엇이고 왜 쓰는가?

by ubmuhan 2023. 5. 15.
반응형

abstract class는 무엇인가?

Flutter에서 추상 클래스(Abstract class)는 인스턴스화할 수 없는 클래스로, 클래스의 일부 메서드를 추상화하여 선언하고 구현을 제공하지 않습니다. 추상 클래스는 상속을 통해 하위 클래스에서 구현될 때 유용합니다.

 

Flutter에서 추상 클래스는 'abstract' 키워드를 사용하여 선언됩니다. 추상 클래스는 일반 클래스와 동일한 방식으로 멤버 변수와 메서드를 가질 수 있습니다. 하지만, 추상 클래스에서는 하나 이상의 추상 메서드를 선언해야 합니다. 추상 메서드는 선언만 있고 구현이 없는 메서드입니다. 추상 메서드는 하위 클래스에서 구현되어야 하므로 하위 클래스에서 반드시 재정의해야 합니다.

 

다음은 Flutter에서 추상 클래스를 사용하는 예제 코드입니다.

 

abstract class Animal {
  String name = "";
  
  void makeSound();
  
  void eat() {
    print('$name is eating');
  }
}

class Dog extends Animal {
  void makeSound() {
    print('Dog barks');
  }
}

void main() {
  Dog dog = Dog();
  dog.name = 'Max';
  dog.makeSound();
  dog.eat();
}

// 실행 결과
Dog barks
Max is eating

 

위의 예제 코드에서 Animal은 추상 클래스로 선언되었습니다. Animal 클래스는 makeSound()와 eat() 메서드를 선언합니다. makeSound()는 추상 메서드로 선언되었습니다. Dog 클래스는 Animal 클래스를 상속하며 makeSound() 메서드를 재정의합니다. main() 함수에서는 Dog 클래스의 인스턴스를 만들어 makeSound()와 eat() 메서드를 호출합니다.

 

이 예제에서는 Animal 클래스를 인스턴스화하지 않고 Dog 클래스를 사용하여 메서드를 호출합니다. 이렇게 하면 추상 클래스를 사용하여 일부 메서드를 추상화하고 하위 클래스에서 이를 구현할 수 있습니다. 추상 클래스는 코드의 재사용성을 높이고 유지보수를 쉽게 만들어줍니다.

 

abstract class를 쓰는 이유는?

1. 코드 재사용성을 높이기 위해

추상 클래스를 사용하면 코드의 재사용성을 높일 수 있습니다. 추상 클래스는 하위 클래스에서 구현할 메서드를 선언하므로 하위 클래스에서 해당 메서드를 구현하면 됩니다. 이렇게 하면 추상 클래스의 코드를 재사용할 수 있으며, 코드 중복을 줄일 수 있습니다.

 

2. 일관된 인터페이스를 유지하기 위해

추상 클래스는 하위 클래스에서 구현해야 하는 메서드를 강제로 선언하므로 일관된 인터페이스를 유지할 수 있습니다. 이렇게 하면 추상 클래스와 하위 클래스 간에 일관성이 유지되며, 코드를 이해하고 유지보수하기 쉬워집니다.

 

3. 다형성을 구현하기 위해

다형성은 하나의 인터페이스를 구현하는 여러 클래스가 있을 때, 이들을 모두 같은 타입으로 다룰 수 있는 기능입니다. 추상 클래스를 사용하면 다형성을 구현할 수 있습니다. 추상 클래스를 상속하는 다른 클래스들은 추상 클래스의 인터페이스를 모두 구현하기 때문에, 추상 클래스의 인스턴스를 다형성적으로 다룰 수 있습니다.

 

4. 강제성을 부여하기 위해

추상 클래스는 하위 클래스에서 반드시 구현해야 하는 메서드를 선언할 수 있습니다. 이렇게 하면 하위 클래스에서 해당 메서드를 구현하지 않으면 컴파일 시 에러가 발생합니다. 이를 통해 강제성을 부여할 수 있으며, 프로그램의 안정성을 높일 수 있습니다.

 

5. 유연성을 제공하기 위해

추상 클래스는 구현을 제공하지 않는 추상 메서드를 가질 수 있습니다. 이렇게 하면 하위 클래스에서 해당 메서드를 구현할 수 있으므로, 추상 클래스는 유연성을 제공할 수 있습니다. 하위 클래스에서 해당 메서드를 자유롭게 구현할 수 있으므로, 다양한 상황에서 사용할 수 있습니다.

 

 

 
반응형

댓글