인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

uckhj님의 프로필 이미지

작성한 질문수

[플러터 상태관리] Bloc 마스터 코스 기초부터 응용까지!

5화 더하기 예제로 보는 bloc/cubit

bloc 이벤트 클래스 생성할 때 getter 를 override 하는 이유는 뭔가요?

작성

·

57

0

 아래처럼 이벤트의 getter를 오버라이드 하는 이유가 뭘까요?

오버라이드를 하건, 하지 않건 동작은 할 것 같은데 그냥 템플릿 처럼 사용을 하는 것인가요, 아니면 성능이 더 뛰어난가요?

 

abstract class CountEvent extends Equatable {}

class AddCountEvent extends CountEvent {
  @override
  List<Object> get props => [];
}

답변 1

0

개발하는남자님의 프로필 이미지
개발하는남자
지식공유자

질문에 답변을 드리겠습니다.

 

우선, 오버라이드(Override)는 부모 클래스로부터 상속받은 메서드나 속성을 자식 클래스에서 재정의할 필요가 있을 때 사용됩니다.

그래서 부모 클래스인 CountEvent 클래스를 보면 abstract 클래스로 정의 되어있고 이 클래스 역시 extends 상속을 Equatable를 받고 있습니다. Equatable을 사용하기 위해서는 반드시 정의해줘야 하는 것이 있는데 그것이 바로 props 입니다.

 

Equatable은 객체간 비교를 손쉽게 해주는 라이브러리입니다.

Dart에서는 기본적으로 == 연산자를 사용하면 객체의 참조를 비교하는데, Equatable을 사용하면 props 배열에 정의된 멤버 변수들을 비교하여 값이 같으면 같은 객체로 인식할 수 있도록 도와줍니다.

 

따라서 props 정의는 필수적으로 해줘야 하는데 abstract 클래스로 CountEvent를 만들어줬기 때문에 props 정의를 자식 요소들에게 책임을 넘기게 된 것입니다. 즉, CountEvent를 상속받는 클래스들은 반드시 props를 정의해야만 사용이 가능하고 그렇게 정의하므로 인해 같은 이벤트가 여러 번 발생해도 동일한 이벤트로 인식할 수 있어 BLoC 패턴에서 불필요한 상태 변화를 방지할 수 있습니다.

 

질문에 답이 되었으면 좋겠습니다.

감사합니다.

 

uckhj님의 프로필 이미지
uckhj
질문자

감사합니다. ㅎ

이해가 되었습니다.

단순히 쓸 수 있으면 땡이라고 생각했는데 역시 다 이유가 있네요 ㅋ

uckhj님의 프로필 이미지

작성한 질문수

질문하기