본문 바로가기

FLUTTER ETC(플러터 기타)

[기록] 이걸 뭐라고 해야함?! - 여러객체를 파라미터로 사용하기?

어떤 메소드에서 다양한 모델을 받아서 사용해야할때가 있었는데...

예를 들어. "개"모델에서 bark() => "멍멍" 라는 함수가 있고, "고양이"모델에서 bark()=>"냐옹"라는 함수가 있다면

다른 함수에서 해당 모델(개, 고양이)을 파라미터로 받아서 해당 모델에 맞는 bark라는 함수를 찍고 싶었다.

그러면 "개"가 들어오면 멍멍 거릴것이고, 고양이 들어오면 "냐옹"거리겠지....

뭐라고 찾아야 할지도 모르겠고, "제네릭, 파라미터, 함수...등등"을 조합해서 검색했지만... 여윽시 나오지 않음 ㅠ

그래서 대충 만들어 봤는데...

void bark()<T>(T 동물){
    if(동물.runtimeType == 개){
      동물.bark();
   }
  }

이렇게 하면 될줄 알았다.

3번째줄인 동물.bark()  이 부분이 문제가 생겼다. 예로 개가 들어왔다면, 개의 bark()함수에 접근이 안된다.

이유까지는 아니고, 혼자 생각에 동물변수가 개 타입의 인스턴스 인건 알겠는데,  동물이 개라는 명시가 안되어있다보니 그런거 같아서.

혹시나 하고, 

void bark()<T>(T 동물){
    if(동물.runtimeType == 개){
      개 강아지 = 동물 as 개;
      동물.bark();
   }
  }

개 강아지 = 동물 as 개 이 부분을 추가 해서 ,

넌 확실하게 개다 라고 해주니 동작한다. 

☀︎ 비교할때 <동물 is 개>가 더 좋을듯...

 

더 자세히 아시는분이 계시면 관련 내용 댓글 달아주시면 복받으실꺼예요~