Android 사전 캠프⛺-012

MunkiJeon·2024년 5월 22일

TIL

목록 보기
12/59
post-thumbnail

TIL (Today I Learned)

오늘 공부한거!

  • 플러터(Flutter)로 시작하는 앱개발 종합반 강의 밀린거 쳐내기…
    > 4강 - API 사용법 익히기 (왓챠피디아)
  • 비동기 이해하기
  • API
    • 다른 사람들이 내 컴퓨터에 있는 데이터에 접근할 수 있도록 만들어둔 기능을 API(Application Programming Interface)라고 부릅니다.
    • 날씨앱 만들땐 기상청 개발자들이 만들어둔 API가 있는지 찾아보면 됨
      구글에 기상청 API 또는 날씨 API라고 검색하면 금방 찾을 수 있음
  • WebView 사용해보기

💡 위 코드들에 대한 설명입니다.
likedBookList.map((book) => book.id) :
>> likedBookList 의 요소들을 순회하며 id 들만 뽑아 새로 iterable(List와 비슷) 을 만듭니다.
likedBookList.removeWhere((book) => book.id == bookId) :
>> toggleLikeBook 함수가 인자로 받는 book 과 id 가 같은 Book 이 likedBookList 내에 있다면 제거합니다.
notifyListeners : 화면을 새로고침합니다.

💡 왜 **likedBookList.contains(book)** 과 같이 작성하지 않을까요?

  • 클래스를 통해 생성된 두개의 객체는 처음에 대입해주는 값들(Book 에서는 title, subtitle 등)이 같더라도, 서로 다른 존재입니다.
  • 코드로 작성해보면 아래와 같습니다.
  •  var book1 = Book(id: "1", title: "톰 소여의 모험");
      var book2 = Book(id: "1", title: "톰 소여의 모험");
      print(book1 == book2) // false
    우리가 작성한 코드에서도 똑같은 일이 일어납니다. 서로 다른 객체로 인식하기 때문에 contains 는 항상 false 를 반환할 수밖에 없습니다.
  • var likedBookList = [Book(id: "1", title: "톰 소여의 모험")];
    var book2 = Book(id: "1", title: "톰 소여의 모험");
    print(likedBookList.contains(book2)) // false
  • 이를 해결하기 위해서 == 연산자를 덮어씌워 비교 로직을 새로 작성하거나, Equatable 등의 플러그인 등을 사용하기도 합니다. 핵심은 두개의 객체가 같은 데이터를 가리키고 있는지를 어떤 식으로 알아낼 것이냐는 점입니다.
    우리는 Google Book API 가 제공하는 id (고유한 값입니다) 를 이용해서 비교 로직을 작성했습니다.
    **likedBookList.map((book) => book.id)** 와 같이 id 들이 담긴 iterable(리스트와 유사합니다) 를 만들고, 이것이 우리가 좋아요 버튼을 누른 Book 의 id 를 포함하는지 비교해, 이미 좋아요가 눌린 책인지 아닌지를 구분할 수 있겠죠!

💡 WebView란 앱 내에서 웹브라우저 컴포넌트를 사용해 웹페이지를 띄우는 것을 말합니다.
즉, 앱 내에 웹 브라우저를 넣는 것이라 생각하시면 됩니다.

 Map toJson() {//Json형태로 저장
  return {
    "id": id,
    "title": title,
    "subtitle": subtitle,
    "authors": authors,
    "publishedDate": publishedDate,
    "thumbnail": thumbnail,
    "previewLink": previewLink,
  };
}
factory Book.fromJson(json) { //Json 형태로 불러옴
  return Book(
    id: json['id'],
    title: json['title'],
    subtitle: json['subtitle'],
    authors: json['authors'],
    publishedDate: json['publishedDate'],
    thumbnail: json['thumbnail'],
    previewLink: json['previewLink'],
  );
}

여기서 factory ....? 이녀석 뭐지,,,??
>> 검색 해보니 factory pattern 이란 녀석이 나옴, 또 검색하니 아래 같이 설명 함

  • 디자인 패턴 중 하나인 Factory 패턴은 객체를 생성하기 위해 인터페이스를 생성하고 인터페이스를 사용하는 클래스에서 어떤 객체를 만들지를 결정하게 하는 패턴이라고 한다.
  • 팩토리 패턴은 싱글톤 패턴이다.
    싱글톤 패턴은 생성자를 여러번 호출해도 결국 초기에 만들어진 하나의 생성자만 사용하는 것이다.
    factory 는 싱글톤 패턴을 사용할 때 쓰는 예약어 이다.
  • 사용하는 이유는 static을 사용한 효과가 나 객체를 생성하지 않고도 이 패턴을 사용할 수 있고, 내부가 변경되어도 모델 생성을 관여하지 않기 때문에 수정을 최소화 할 수 있다.

> 나: 뭔...말이지? 🤔 일단 예제 보고 파악 해보자...


여러번 Class불러서 처리하는 것을 한번 불러서 처리하는...? 뭐 그런식으로 이해하고 넘어감...

profile
공장자동화와 웹 개발을 핥아 먹다 앱 개발로 전향한 개발자의 키보드의 낡은 키캡⛑️

0개의 댓글