Skip to main content

라이브러리를 이용한 확장

· 9 min read
Junseok Yang
Football Loving Programmer

📚 오늘의 학습 내용

아침에 코딩
* 문제
주어진 배열 nums에서 특정 값 val을 제거해야 합니다.
제거한 후의 배열은 배열의 처음 부분에 남겨두고, 배열의 길이를 반환해야 합니다.
배열에서 제거된 값은 결과에 포함되지 않아야 하며,
반환된 길이를 기준으로 원래 배열의 처음 부분에 남은 값이 올바른 결과로 여겨집니다.

* 조건
1. 0 <= nums.length <= 100
2. 0 <= nums[i] <= 50
3. 0 <= val <= 100
class Solution {
int removeElement(List<int> nums, int val) {
int k = 0; // val이 아닌 요소의 개수를 셀 포인터

for (int i = 0; i < nums.length; i++) {
if (nums[i] != val) {
nums[k] = nums[i]; // val이 아닌 요소를 k 위치에 배치
k++; // 다음 위치로 이동
}
}

return k; // val이 아닌 요소의 개수를 반환
}
}

void main() {
Solution solution = Solution();
print(solution.removeElement([3, 2, 2, 3], 3)); // 2
print(solution.removeElement([0, 1, 2, 2, 3, 0, 4, 2], 2)); // 5
}

알게 된 점

  • 특정 요소가 제거된 후의 배열까지 만들려고 했었는데 그게 아니라 제거된 후 배열의 길이만 구하면 되어서 간단하게 할 수 있었다.

google_fonts , image_picker 등 다양한 꿀 외부 라이브러리에 대해서 알게 됐다.

  • import '[라이브러리 이름]';
    import 'dart:html';
    import 'package:http/http.dart'
  • import '[파일 경로]';
    import 'src/my_utils.dart';

✍️ 주요 학습 내용

배운 내용

  • 라이브러리 개념
  • 라이브러리 특징
  • 라이브러리 종류

새로 알게된 개념

라이브러리 종류

Dart SDK 표준 라이브러리

  • 프로그래밍에 필요한 기능을 제공하는 핵심 라이브러리 등을 가지고 있음

  • 모든 플랫폼에서 사용 가능

    • dart:core
    • dart:async
    • dart:collection
    • dart:convert
      • Json, UTF-8
      • 인코더, 디코더 제공
    • dart:developer
    • dart:math
  • Native Platform에서 사용 가능

    • Native platform 은 타겟이 Mobile, Desktop 이라고 했던 것 기억하시죠 ~?
    • dart:ffi
      • DartC API 를 사용할 수 있도록 하는 기능을 제공해요.
    • dart:io
      • 파일, 소켓, HTTP, 기타 입출력 등의 기능을 제공해요.
  • Web platform에서 사용 가능

    • 참고로, Web platformJavaScript 로 컴파일되는 코드랍니다 !
    • package:web
      • 가벼운 브라우저 API 와 연결하는 기능을 제공해요.
    • dart:js_interop
      • JavaScript 와 브라우저 API 를 상호운용할 수 있는 기능을 제공해요.
    • dart:html
      • HTML 요소들과 Web 기반 응용 프로그램 리소스들을 제공해요.

Dart SDK에 포함되어 있지 않은 라이브러리

  • Pub.dev 에서 다양한 외부 라이브러리를 쉽게 찾아서 사용할 수 있어요 🤩
  • cupertino_icons
    • FlutterCupertino 위젯에 쓰이는 기본 아이콘 에셋을 제공해요.
  • intl
    • 번역, 날짜 포맷팅, 숫자 포맷팅 등 국제화와 현지화 기능을 제공해요.
  • shared_preferences
    • 간단한 데이터를 다루는 기능을 제공해요.
    • iOSmacOS 에서 사용하는 NSUserDefaults, Android 에서 사용하는 SharedPreferences 와 같은 역할을 해요.
  • url_launcher
    • URL 을 다루는 기능을 제공해요.
  • image_picker
    • iOSAndroid 에서 사진 다루는 기능을 제공해요.
    • 예시로 카메라로 사진 찍는 기능이랑 앨범에서 사진 선택하는 기능이 있어요 !
  • firebase_core
    • Firebase 와 연동하는 작업할 때 필요한 핵심 기능을 제공해요.
  • firebase_auth
    • Firebase 인증 API 를 사용하기 위한 기능을 제공해요.
  • google_fonts
    • fonts.google.com 에서 제공하는 폰트를 사용하기 위한 기능을 제공해요.
  • permission_handler
    • iOSAndroid 의 권한을 다루는 기능을 제공해요.
  • custom_lint
    • Lint 규칙을 쉽게 적용할 수 있도록 해주는 기능을 제공해요.
    • Lint ?
      • 어떤 친구인가요 ?
        • 오류가 발생할 수 있는 코드, 코드 스타일에 어긋난 코드, 비효율적이거나 불필요한 코드 등을 찾아내서 경고를 띄워주는 도구
      • 왜 사용하나요 ? 사용하면 뭐가 좋은가요 ?
        • 코드의 품질을 개선할 수 있어요.
        • 코드의 가독성을 향상시킬 수 있어요.
        • 유지보수성 높은 프로젝트를 만들 수 있어요.
  • flutter_svg
    • SVG 를 렌더링하기 위한 기능을 제공해요.
  • cached_network_image
    • 네트워크를 통해 사진을 받아오고, 캐싱하는 기능을 제공해요.
  • flutter_local_notifications
    • 로컬 알림을 다루는 기능 (ex. 알림 표시, 알림 예약) 을 제공해요.
  • path_provider
    • 파일 시스템을 사용하기 위한 기능을 제공해요.
  • geolocator
    • iOSAndroid 에서 위치를 다루기 위한 기능을 제공해요.
  • dio
    • HTTP 네트워크 사용을 위한 기능을 제공해요.
라이브러리 특징
  • 어떤 특징이 있나요 ?
    • as 를 통해 라이브러리에 별칭을 부여할 수 있어요.
      import 'package:http/http.dart' as http;
    • show 를 통해 라이브러리에서 필요한 부분만 선택적으로 가져올 수 있어요.
      import 'package:lib1/lib1.dart' show foo;
    • hide 를 통해 라이브러리의 특정 부분을 제외하고 가져올 수 있어요.
      import 'package:lib2/lib2.dart' hide foo;
    • deferred as 를 통해 라이브러리가 필요한 시점에 로드되도록 할 수 있어요.
      • 지연 로딩 이라고도 불러요 🙂
      • 왜 사용하나요 ? 사용하면 뭐가 좋은가요 ?
        • 필요한 시점에 라이브러리가 로드되기 때문에 초기화하는 시간이 줄어들고, 성능이 향상돼요 👍🏼
      • 어떤 특징이 있나요 ?
        • 모든 플랫폼에서 지원하는 것은 아니고, Web platform 에서만 지원해요 🥹
      • 어떻게 생겼나요 ?
        • import ‘[라이브러리 이름이나 파일 경로]’ deferred as [식별자];
          import 'package:greetings/hello.dart' deferred as hello;
      • 어떻게 동작하나요 ?
        • deferred as 뒤에 썼던 식별자를 통해 loadLibrary() 를 라이브러리가 필요한 시점에 호출하면 그 라이브러리를 불러와요 !
          import 'package:greetings/hello.dart' deferred as hello;

          Future<void> greet() async {
          await hello.loadLibrary();
          hello.printGreeting();
          }
        • 저는 loadLibrary() 를 정의한 적이 없는데, 어떻게 된건가요 ?
          • deferred as [식별자] 를 통해 식별자를 만들어 주는 순간, 그 식별자에 loadLibrary() 가 자동으로 정의된답니다 🤩

실습한 내용

  • 없음

🚨 발생한 문제/에러

  • 없음

📝 코드 스니펫

// 오늘 배운 주요 코드
import 'dart:io';

📚 내일 학습할 내용

  • 개인과제 준비

💭 오늘의 회고

잘한 점 👍

  • 음..

개선할 점 🔨

  • 계획 세우기

배운 점 💡

  • 라이브러리

✏️ 참고 자료