본문 바로가기

카테고리 없음

[Dart.241031] 객체에서 검색하는 contains, any 나는 이번에 뭘 쓰지?

TIL 오늘 배운 내용을 매일 하루를 마무리하며 쓰려고 했는데, 그것은 쉽지 않은 것으로 밝혀졌다.

공부 마치고 운동하고 돌아와서 컴퓨터에 앉을 수 없다. 

헥헥거리고 집에 들어와서 물 한 컵 벌컥벌컥 마시고, 씻고 하면 이제 열두시가 가까이 되는 것이다. 그 시간에 어떻게 내가 책상 앞에 앉을 수 있지? 포근한 침대를 뒤로하고? 그것은 도무지 가능하지 않은 일인 것이다. 그래서 오늘부터는 일찌감치 공부하다 배운 내용을 기록해둬야겠다고 생각했다. 그래서 어제도 그제도 그그저께도 나는 공부 기록을 작성하지 못하였다. 

 

공부하는 과정 이름은 플러터로 앱 만드는 과정인데, 플러터에서 Dart 언어를 사용해서 그걸 공부중이다. 그래서 헤더 제목에 원래 Flutter 썼었는데, 오늘은 Dart로 썼다. 앞으로 플러터 oriented 콘텐츠를 작성할 때는 Flutter로 헤더 잡고, Dart-oriented 인 콘텐츠라면 Dart로 제목을 잡아야지.

 

클래스 생성자로 만든 객체들이 어떤 집합 안에 포함이 되는지 찾아봐야 하는 경우가 있다.

에를 들어, 지금 나는 터미널에서 돌아가는 귀여운 쇼핑몰을 하나 만들고 있는데, 이 쇼핑몰에서 셔츠, 바지, 양말, 스웨터 이런것을 판다. 그런데 이제 사용자가 와서 '24SS 미우미우 헤어핀' 이런거 검색하면 '팔지 않아요!' 해야 하고, '스웨터' 검색하면 '몇 개나 드릴까요?' 해야 하는 것이다. 아주 검소하고 소박한 쇼핑몰이다. 쇼핑몰 이름은 아직 짓지 않았다. 무명의 쇼핑몰인 상태.

 

void addToCart() {
    Product? selectedProduct;
    while (selectedProduct == null) {
      stdout.write("상품 이름을 입력해 주세요: ");
      String? name = stdin.readLineSync();

      bool productExist = products.any((product) => product.name == name);

      if (productExist) {
        print('exist!');
      }
    }
  }

 

 

나는 두괄식을 좋아한다. 결론부터 말하자면 any를 썼다. 원래 강좌에서 가장 먼저 배우고 여기저기 코딩 문제 풀 때도 contains를 자주 써서 contains로 가장 먼저 코드를 작성했었다. 그런데 객체들이 다 Product 인스턴스여서, 예를 들어, "Product('스웨터', 300원)" 인스턴스 통째로 존재 유무를 확인하는거라면 contains가 맞다. 하지만 나의 경우에는 우선 사용자가 검색한 '스웨터' 라는 검색어에 걸리는 인스턴스가 있나를 확인하는게 더 중요했다. 그래서 any가 더 나은 접근이라고 생각했다. 

 

지금은 이렇게 코드를 작성해서 만들어가고 있는데, 나중에는 이 부분을 contains로 바꿔야하는 그런 상황이 올 수 도 있는 것이겠지. 세상은 녹록치 않으니까!! 하지만 나도!! 녹록치 않다!!