본문 바로가기

춘기IT/춘기개발

Dart 사전 용어 정리 학습

Today I Learned (250623) 1.

   

INTRO. 사전 용어 정리

- 프로그램: 컴퓨터가 이해할 수 있는 명령어의 나열

- 명령어: 원하는 작업을 컴퓨터가 수행할 수 있도록 컴퓨터에게 하나 하나 명령을 내릴 때 사용하는 명령어 or 프로그래밍 언어

  ㄴ 이 명령어들을 합친 것이 프로그램

  ㄴ 명령어(프로그래밍 언어)의 종류는 크게 2가지

     1. 저급(Low-level) 프로그래밍 언어

        ㄴ 0과 1

        ㄴ 종류)

            1) 기계어(Machin Code): 컴퓨터가 직접 실행할 수 있는 0과 1로 이루어진 이진수 코드

            2) 어셈블리어(Assembly Language): 기계어를 인간에게 좀 더 친숙한 형태로 변환한 언어

     2. 고급(High-level) 프로그래밍 언어

         ㄴ 종류)

             1) C

             2) C++ (C어어에서 확장된 언어, 게임 개발, 고성능 애플리케이션에 주로 사용되는 프로그래밍 언어)

             3) C#

             4) Kotlin (안드로이드 애플리케이션 개발에 사용되는 프로그래밍 언어)

             5) Python (데이터 분석, 인공지능 등.. 다양한 분야에서 사용되는 범용 프로그래밍 언어)

             6) Java

             7) JavaScript (Web 애플리케이션 개발에 주로 사용되는 프로그래밍 언어)

             8) Dart

- 컴파일러 (Compiler)

   ㄴ Compile (컴파일) + er (수행하는 사람 또는 물체)

 컴파일(Compile)
- 컴퓨터 언어와 사람 언어의 간극을 줄이기 위해 나온 개념
- 사람이 고급 프로그래밍 언어로 프로그래밍하면 컴퓨터가 이해할 수 있도록 저급 프로그래밍 언어로 번역하는 행위 

컴파일 종류
1. Just-in-Time (JIT) 컴파일
- 프로그램 실행 중에(런타임) 코드의 일부 또는 전부를 컴파일하는 기술
- 장점: 바로 바로 컴파일하기 때문에 실행 결과를 실시간으로 확인 할 수 있음
- 단점: 실행 중에 계속 코드를 컴파일해서 상대적으로 느림

2. Aheat-of-Time (AOT) 컴파일
- 프로그램 실행 전에 미리 컴파일하는 기술
- 대부분의 전통적인 컴파일러(C, C++)가 사용하는 방식
- 장점: 한 번 컴파일 되고나면 실행 속도가 빠름
- 단점: 실시간으로 컴파일하는 것이 아니어서 결과를 바로 확인할 수 없음

* Dart는 이 2가지 컴파일러를 모두 사용하여
  AOT로 성능을 높이고, JIT로 실시간 결과를 확인하면서 효율을 높일 수 있음.

 

📌 Dart

- 구글이 개발한 오픈 소스 프로그래밍 언어

- Flutter 프레임워크의 기반이 되는 프로그래밍 언어

- 다양한 클라이언트(web, mobile, desktop) 애플리케이션 개발에 최적화된 언어

더보기

플랫폼 (Platform)

- 프로그램을 구동할 수 있는 기반

- 종류

  1) Native

      ㄴ Target: Mobile (Android, iOS) / Desktop (Window, Linux, macOS)

  2) Web

      ㄴ Target: Web (Chrome, Firefox, Safari, Edge)

 

멀티플랫폼 (Muti-Platform)

- 하나의 프로그램이 여러 플랫폼에서 구동될 수 있는 환경

- Dart는 하나의 코드로 여러 플랫폼의 애플리케이션 실행 가능!

- 간결하고 읽기 쉬운 문법

- 2가지 컴파일 기술: AOT 컴파일을 통해 고성능 애플리케이션 개발, JIT 컴파일을 통해 실시간으로 확인하면서 효율적으로 개발

- 현대적인 프로그래밍 언어 기능 지원

더보기

현대적인 프로그래밍 언어

1. 객체 지향 프로그래밍

2. 함수형 프로그래밍

3. 비동기 프로그래밍

- Type Safe: 안전한 타입 체계를 가지고 있음

더보기

타입(Type)

- 프로그래밍 할 때 다루는 데이터의 형태

- 컴퓨터한테는 어떤 형태의 데이터를 다룰 지 미리 알려줘야 함 > 그 데이터의 형태가 타입

- 종류: 1. 숫자형(int, Double) / 2. 문자형(String) / 3. 컬렉션형(List, Set, Map)

 

Type Safe

- 타입을 안전하게 함

  ㄴ 어떻게?

      데이터 타입을 정하고 나서 그 타입이 아닌 다른 타입의 값을 넣으면 오류가 발생하기 때문에

      처음 설정한 타입에 맞는 데이터를 넣을 수밖에 없음

      즉, 오류를 뱉어서 올바른 타입의 값만 넣을 수 있게 하기 때문에 컴퓨터가 고장나는 상황을 사전에 방지

- Null Safe

더보기

null ?

- 값이 없는 데이터를 사용해야하는 경우, 컴퓨터에게 데이터 값이 없음을 알려주기 위해 사용하는 키워드

- 프로그래밍을 하다보면 프로그램 실행 전에는 값을 정할 수 없지만, 프로그램 실행 중 정할 수밖에 없는 상황이 있음

  ㄴ 이런 경우, 데이터 값을 null로 우선 설정해 두고, 추후에 특정 값을 넣어 줄 수 있음

 

Null Safe

- null에 대해 안전한 상황을 만들어 준다는 뜻

- 데이터가 null 값을 가질 수 있도록 설정하지 않는 한, 절대 null 값을 가질 수 없다는 뜻

* 값이 없는 상태의 데이터 null을 쓰라고 하면 컴퓨터는 뇌정지가 옴, 컴퓨터는 Null을 싫어하므로 최대한 덜 쓰는 게 좋음

- 컴퓨터랑 상관없이 null을 쓰고 싶다면?

  ㄴ 그때는 타입 뒤에 ? 붙이기

int a = 42; // a 는 null 값 가질 수 없음
a = null; // 오류 발생

int? b = 42; // b 는 null 값 가질 수 있음
b = null; // 정상

 

   ㄴ null을 허용하지 않도록 설정한 데이터에 null을 넣으면 오류를 뱉어서 컴퓨터가 뇌정지 되기 전 코드 고칠 수 있도록 함

   ㄴ ? 붙여서 null을 가질 수 있도록 만든 데이터는 Nullable 이라고 표현함

   ㄴ ? 붙이지 않아서 null을 허용하지 않는 경우는 NonNullable 이라고 함

 

📌 Dart 개발 환경 구성 (feat. SDK)

- SDK (Software Development Kit)

   ㄴ 특정 플랫폼에서 프로그램을 만들고, 테스트하고, 배포하는 과정에서 필요한 도구를 제공하는 패키지

   ㄴ 구성: 컴파일러 + 라이브러리 + 디버깅 및 테스트 도구 + 문서 및 샘플 코드 + 패키지 관리자(외부 라이브러리)

1. 컴파일러

2. 라이브러리
- 프로그래밍할 때 자주 사용하는 코드를 미리 정의해둔 코드의 집합
- 개발자가 매번 코드를 장황하게 쓰지 않고도 원하는 기능 개발 가능

3. 디버깅 및 테스트 도구
- 디버그(Debug):오류, 디버깅(Debugging): 오류를 찾아내고 수정하는 과정
- SDK는 오류를 찾고, 수정하는 과정을 도움

4. 문서 및 샘플 코드
- SDK도 제품이기 때문에 설명서(어떻게 잘 쓰는지)와 예시 코드(쉽게 따라할 수 있도록) 제공

5. 패키지 관리자
- 외부 라이브러리나 패키지를 설치하고, 관리할 수 있도록 도와주는 도구
- 외부 라이브러리: SDK가 제공하는 라이브러리 외 다른 라이브러리
  ㄴ 종류
Android SDK
- Android 애플리케이션을 개발할 때 필요한 도구 모음
- Android Studio, Android Emulator, API 등

iOS SDK
- iOS 애플리케이션을 개발할 때 필요한 도구 모음
- Xcode, iOS Simulator, API 등

Unity SDK
- 게임(2D, 3D) / 가상현실(VR) / 증강현실(AR) 애플리케이션 개발할 때 필요한 도구 모음
- Unity Editor, API 등

Dart SDK
- Dart를 사용하여 애플리케이션을 개발할 때 필요한 도구 모음

Flutter SDK
- 멀티 플랫폼 (Mobile, Web, Desktop) 애플리케이션을 개발할 때 필요한 도구 모음
- Dart SDK, Flutter 프레임워크 및 위젯 등 포함

AWS SDK
- 클라우드 기반의 애플리케이션을 개발할 때 필요한 도구 모음
- API, 라이브러리, CLI(명령줄 인터페이스) 등

Reactive Native SDK
- 멀티 플랫폼(Mobile) 애플리케이션을 개발할 때 필요한 도구 모음
- 라이브러리(React, JavaScript)와 Native 모듈(iOS, Android) 등

TensorFlow SDK
- Machine Learning 애플리케이션 개발할 때 필요한 도구 모음
- 라이브러리, 모델, 데이터셋 등

...​

 

📌 Dart SDK

- Dart 코드를 작성하고, 빌드(Build)하고, 디버깅(Devugging)하고, 테스트(Test)할 때 필요한 모든 도구 제공

- Flutter SDK에 포함되어 있어, Flutter 개발 환경 구성할 때 자동으로 설치됨

  ㄴ 따라서, Flutter 애플리케이션 개발 예정시, Dart SDK 따로 설치 필요는 없음

- 다양한 운영체제 (Windows, Linux, macOS)에서 사용 가능

- 정기적 업데이트 > 최신 버너 유지시 더 안정적 프로그래밍 가능

  * 최신 버전 확인 👉 https://github.com/dart-lang/sdk/tags

 

GitHub - dart-lang/sdk: The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more.

The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more. - dart-lang/sdk

github.com

Dart SDK는 3가지(Stable / Beta / Dev) 버전으로 배포

 

1. Stable

- 3개월에 한번씩 업데이트되는 안정적인 배포 버전 (가장 안정적 best)

- 형태: x.y.z / ex) 1.24.3 / 2.1.0

 

2. Beta

- 1개월에 한번씩 업데이트되는 배포 버전

- 새로운 기능을 Stable에 넣기 전에 미리 테스트해보는 용도이기 때문에 안정적이진 않음

- 형태: x.y.z-a.b.beta / ex) 3.6.0-216.1.beta

 

3. Deb

- 2주일에 한번씩 업데이트되는 배포 버전

- 최신 업데이트가 적용된 버전으로 검증되지 않은 기능이 포함되어 잇을 수 있어 Beta와 마찬가지로 안정적이진 않음

- 형태: x.y.z-a.b.dev / ex) 3.6.0-190.0.dev

 

* Dart SDK 구성

- 라이브러리

  ㄴ core, async, math, html 등의 라이브러리

- 명령줄(Command-line) 도구

  ㄴ dart: Dart 코드 작성, 포맷, 분석, 테스트, 컴파일, 실행 등을 하기 위한 명령어

  ㄴ AOT (Ahead-Of-Time) 컴파일된 프로그램을 실행하기 위한 명령어

 

📌 Dart Pad

- 웹 브라우저에서 Dart 코드를 작성하고, 바로 실행할 수 있는 온라인 코드 편집기

- 별도의 개발 환경을 설치하지 않고도 Dart 언어를 배우고, 실습 가능

- Flutter 코드 실행할 수 있어, Flutter UI 빠른 테스트 가능

   ㄴ 간단한 Flutter 애플리케이션 테스트나 UI 위젯 학습 가능

- 코드 자동 완성, 구문 강조, 오류 표시 기능 있음 > 빠른 수정 가능