728x90

DART 21

Dart 3.0의 새로운 클래스 제한자 (Class Modifiers)

Dart 3.0의 새로운 클래스 제한자 (Class Modifiers)Dart 3.0에서는 클래스의 상속 및 구현을 제한하는 새로운 키워드(제한자) 가 도입되었습니다.이를 통해 코드의 안정성을 높이고, 명확한 의도를 표현할 수 있습니다.1. Dart 3.0의 클래스 제한자 종류키워드설명예제sealed동일한 파일 내에서만 상속 가능sealed class Animal {}interface인터페이스로만 사용 가능interface class Animal {}final상속 불가 (변경 불가능한 클래스)final class Animal {}base상속 가능하지만, 하위 클래스도 base, final, sealed이어야 함base class Animal {}2. sealed (봉인 클래스, 제한된 상속)sealed ..

Dart 3.0의 향상된 switch 문

Dart 3.0의 향상된 switch 문Dart 3.0에서는 switch 문이 크게 향상되어 패턴 매칭(Pattern Matching), 표현식(switch expression), 가드 절(Guard Clause) 등을 지원합니다.이제 switch 문을 더욱 간결하고 강력하게 사용할 수 있습니다.1. switch 표현식 (switch expression)Dart 3.0에서는 switch 문을 표현식(expression)으로 사용하여 값을 반환할 수 있음.1.1. 기존 switch 문 (Dart 2.x)String getColorMeaning(String color) { switch (color) { case 'red': return '정지'; case 'yellow': re..

Dart 3.0의 레코드 (Records)

Dart 3.0의 레코드 (Records)Dart 3.0에서 도입된 레코드(Records) 는 여러 개의 값을 하나의 그룹으로 묶어서 반환하거나 전달할 수 있는 튜플(Tuple) 형태의 데이터 구조입니다.기존 List나 Map 없이 여러 개의 값을 직접 반환할 수 있음클래스나 구조체를 만들지 않고도 여러 데이터를 그룹화 가능구조 분해(Destructuring) 를 통해 개별 변수에 쉽게 할당 가능가변 레코드와 불변 레코드 지원1. 레코드 기본 사용법1.1. 레코드 생성void main() { var record = ('Alice', 30, true); print(record); // ('Alice', 30, true)}여러 개의 값을 하나의 레코드로 묶어서 저장 가능1.2. 레코드의 개별 값 접근vo..

Dart Completer (커스텀 비동기 처리)

Dart Completer (커스텀 비동기 처리)Dart에서 Completer 는 Future를 수동으로 제어할 수 있는 객체입니다.즉, 비동기 작업을 직접 완료하거나, 실패 처리할 때 사용됩니다.1. Completer란?Future는 일반적으로 비동기 작업이 자동으로 완료되지만,Completer를 사용하면 개발자가 Future를 수동으로 완료(complete)하거나 오류 처리(completeError)할 수 있음.비동기 작업의 흐름을 개발자가 직접 제어할 때 유용.2. Completer 기본 사용법2.1. Completer를 사용하여 비동기 데이터 반환import 'dart:async';Future fetchData() { Completer completer = Completer(); Future...

Dart의 Stream (비동기 데이터 스트림)

Dart의 Stream (비동기 데이터 스트림)Dart에서 Stream은 비동기 데이터의 연속적인 흐름을 처리하는 기능입니다.Future는 단일 비동기 결과를 반환하지만,Stream은 여러 개의 비동기 데이터를 순차적으로 전달할 수 있습니다.Stream이 필요한 경우네트워크 요청을 통해 실시간 데이터 수신 (예: WebSocket)센서 데이터 처리 (예: GPS, 가속도 센서)버튼 클릭 이벤트 감지파일 다운로드 진행 상황 모니터링오디오/비디오 스트리밍 데이터 처리1. Stream 기본 개념비동기적으로 여러 개의 데이터를 순차적으로 처리이벤트 기반으로 동작하며 데이터가 발생할 때마다 수신listen()을 사용하여 구독(subscribe)한 번만 사용할 수도 있고, 여러 구독자(multicast)와 공유 가..

Dart 비동기 프로그래밍

Dart 비동기 프로그래밍 (Asynchronous Programming)Dart는 비동기 프로그래밍(Asynchronous Programming)을 지원하여 네트워크 요청, 파일 읽기, 데이터베이스 작업과 같이 시간이 걸리는 작업을 효율적으로 처리할 수 있습니다. Dart의 비동기 프로그래밍 핵심 요소:Future: 비동기 작업을 나타내는 객체async & await: 비동기 함수 정의 및 실행Stream: 여러 개의 비동기 데이터를 순차적으로 처리1. Future란?Future는 미래에 완료될 값(비동기 작업의 결과)을 나타내는 객체시간이 걸리는 작업이 완료되면 결과 값을 반환하거나 예외를 발생Future는 단일 값을 반환함 (여러 값 처리 시 Stream 사용)1.1. Future 기본 사용법Fut..

Dart: Generics, Static, Cascade Operator

제네릭(Generics), 스태틱(Static), 캐스케이드 연산자(Cascade Operator)Dart의 객체지향 프로그래밍(OOP)에서는 제네릭(Generic), 정적 변수/메서드(Static), 캐스케이드 연산자(Cascade Operator) 를 사용하여 유연하고, 효율적인 코드 작성이 가능합니다.1. 제네릭 (Generics)제네릭(Generic)은 데이터 타입을 일반화하여 다양한 타입의 객체를 처리할 수 있도록 하는 기능입니다.Dart에서는 리스트(List), 맵(Map), 클래스, 함수에서 제네릭을 활용할 수 있습니다.1.1 제네릭을 사용하지 않은 경우void main() { List names = ["Alice", "Bob", "Charlie"]; names.add(100); // 의..

Dart 믹스인 (Mixin)

Dart 믹스인 (Mixin)Mixin은 Dart에서 다중 상속 없이 코드 재사용성을 높이는 방법입니다.클래스에 추가적인 기능을 제공하면서도 클래스 계층 구조를 단순하게 유지할 수 있습니다.1. Mixin 개념다중 상속이 불가능한 Dart에서 코드 재사용을 위해 사용됨with 키워드를 사용하여 기존 클래스에 믹스인 기능 추가 가능상속(Inheritance)과 다름 (Mixin은 부모-자식 관계가 아님)인터페이스(implements)와도 다름 (Mixin은 강제 구현 필요 없음)2. Mixin 기본 문법mixin Swimmable { void swim() { print("수영할 수 있습니다. 🏊"); }}class Fish with Swimmable {}void main() { Fish fis..

Dart 객체지향 프로그래밍 - 상속(Inheritance)

상속(Inheritance)상속은 부모 클래스의 속성과 메서드를 자식 클래스에서 사용할 수 있도록 하는 기능입니다.1. 기본 상속class Animal { String name; Animal(this.name); void makeSound() { print("$name이(가) 소리를 냅니다."); }}class Dog extends Animal { Dog(String name) : super(name); void bark() { print("$name이(가) 짖습니다. 🐶"); }}void main() { Dog dog = Dog("멍멍이"); dog.makeSound(); // 멍멍이가 소리를 냅니다. dog.bark(); // 멍멍이가 짖습니다. 🐶}super..

Dart 객체지향 프로그래밍 - 클래스와 객체

Dart 객체지향 프로그래밍 (OOP) - Class와 ObjectDart는 객체지향 프로그래밍(OOP: Object-Oriented Programming)을 지원하는 언어입니다.OOP의 핵심 개념인 클래스(Class), 객체(Object), 생성자(Constructor), 상속(Inheritance), 다형성(Polymorphism), 캡슐화(Encapsulation), 추상 클래스(Abstract Class), 인터페이스(Interface), 믹스인(Mixin) 등을 지원합니다.1. 클래스(Class)와 객체(Object)Dart에서 클래스는 객체를 생성하는 틀(템플릿) 역할을 하며, 객체는 클래스의 인스턴스(Instance) 입니다.1. 1 클래스 정의 및 객체 생성class Person { St..

Dart 화살표 함수

Dart에서 화살표 함수 (=>) 사용하기Dart의 화살표 함수(Arrow Function) 는 단순한 함수 표현식을 간결하게 작성할 수 있도록 도와줍니다.=> 기호를 사용하여 함수 본문을 한 줄로 줄일 수 있습니다.1. 화살표 함수 기본 문법1.1 기본 함수일반적인 함수:int add(int a, int b) { return a + b;}화살표 함수로 변환:int add(int a, int b) => a + b;차이점:{ return ... } 대신 =>를 사용하여 한 줄로 작성 가능세미콜론(;)을 함수 본문 끝에 추가해야 함결과는 동일void main() { print(add(3, 5)); // 8}2. 반환값이 없는 경우 (void)화살표 함수는 void 함수에도 사용할 수 있습니다.2.1 일반..

Dart의 예외 처리

Dart의 예외 처리 (try - catch - finally)Dart에서는 예외(Exception)가 발생할 수 있는 코드를 안전하게 실행하기 위해 try-catch-finally 문을 제공합니다.예외 처리는 프로그램의 갑작스러운 중단을 방지하고, 오류를 처리하여 정상적으로 동작하도록 돕습니다.1. 예외(Exception)란?Dart에서 예외는 실행 중에 발생하는 예기치 않은 오류를 의미합니다.예를 들어, 0으로 나누기, 없는 리스트 요소 접근, 네트워크 연결 오류 등이 예외에 해당합니다. 예외가 발생하면 프로그램이 중단되므로 이를 방지해야 합니다.void main() { int a = 10, b = 0; print(a ~/ b); // 오류 발생 (정수를 0으로 나눌 수 없음)}- 위 코드는 In..

Dart의 함수(Function)와 람다(Lambda)

Dart의 함수(Function)와 람다(Lambda)Dart에서 함수는 코드의 재사용성을 높이고, 모듈화하여 유지보수를 쉽게 만드는 중요한 요소입니다.또한 Dart는 람다(Lambda) 함수(= 화살표 함수) 를 지원하여 간결한 코드 작성을 도와줍니다.1. 함수(Function) 기본 문법1.1 함수 선언 및 호출void sayHello() { print("Hello, Dart!");}void main() { sayHello(); // 함수 호출}- void는 반환값이 없을 때 사용됩니다.1.2 매개변수가 있는 함수void greet(String name) { print("Hello, $name!");}void main() { greet("Alice"); // Hello, Alice!}- 함수의..

Dart의 제어문

Dart의 제어문 (Control Flow Statements)Dart에서 제어문은 코드의 흐름을 제어하고 조건을 평가하며 반복 실행하는 데 사용됩니다.대표적인 제어문에는 조건문 (if, switch)과 반복문 (for, while, do-while)이 있습니다.1. 조건문 (Conditional Statements)조건문은 특정 조건이 참(true)이면 코드 블록을 실행하고, 거짓(false)이면 다른 코드를 실행하도록 만듭니다.(1) if - else 문if 문은 주어진 조건이 true일 때만 실행됩니다. else는 if 조건이 false일 때 실행됩니다.void main() { int age = 20; if (age >= 18) { print("성인입니다."); } else { pr..

Dart의 연산자

Dart의 연산자 (Operators)Dart는 다양한 연산자를 제공하여 수학 연산, 비교, 논리 연산, 비트 연산, 조건 연산 등을 수행할 수 있습니다.각 연산자의 종류와 사용 방법을 자세히 정리해 보겠습니다.1. 산술 연산자 (Arithmetic Operators)산술 연산자는 숫자 값을 계산하는 데 사용됩니다.연산자설명예제+덧셈a + b-뺄셈a - b*곱셈a * b/나눗셈 (결과: double)10 / 3 → 3.3333~/몫 (정수 나눗셈)10 ~/ 3 → 3%나머지10 % 3 → 1void main() { int a = 10, b = 3; print(a + b); // 13 print(a - b); // 7 print(a * b); // 30 print(a / b); // 3.3..

Dart의 enum

Dart의 enum (열거형)Dart의 enum(열거형)은 고정된 상수 값의 집합을 정의할 때 사용됩니다.보통 상태(state)나 옵션(option) 값을 표현할 때 유용합니다.1. enum 기본 문법Dart에서 enum을 선언하는 방법은 다음과 같습니다.(1) enum 선언enum Color { red, green, blue }void main() { Color selectedColor = Color.green; print(selectedColor); // Color.green}enum의 값은 Color.red, Color.green과 같이 사용됩니다.(2) enum의 모든 값 가져오기Color.values를 사용하면 enum에 정의된 모든 값을 가져올 수 있습니다.void main() { pr..

Dart의 컬렉션(Collection)

Dart의 컬렉션(Collection) 타입Dart에서 컬렉션(Collection) 타입은 여러 개의 값을 저장하고 조작할 수 있는 자료 구조입니다.대표적인 컬렉션 타입은 List(리스트), Set(집합), Map(맵)이 있습니다.1. List (리스트, 배열)Dart의 List는 배열과 같은 개념으로, 순서가 있는 데이터 모음을 저장합니다.(1) 리스트 선언 및 초기화void main() { // 정수 리스트 List numbers = [1, 2, 3, 4, 5]; // 문자열 리스트 List fruits = ["Apple", "Banana", "Cherry"]; // 타입을 지정하지 않은 리스트 (dynamic) List mixedList = [1, "Hello", true, 3.14]; ..

Dart의 dynamic 변수 타입

Dynamic 변수Dart에서 dynamic 타입은 모든 타입을 저장할 수 있는 동적 변수를 의미합니다.이는 컴파일 타임에 타입이 정해지지 않고, 런타임에 타입이 결정되는 특징이 있습니다.1. dynamic 변수 선언void main() { dynamic value = 10; print(value); // 10 value = "Hello"; print(value); // Hello value = true; print(value); // true}dynamic 타입은 값이 변경될 때마다 타입이 변할 수 있습니다.2. dynamic vs var vs Object타입특징변경 가능 여부var선언 시 타입이 자동 결정됨, 이후 변경 불가한 번 타입이 결정되면 변경 불가능dynamic모든..

Dart 기초 문법

Dart 기초 문법 정리Dart는 객체지향 언어로, Flutter 개발에서 필수적으로 사용됩니다.Dart의 기초 문법의 기존적인 구조를 살펴본 후 자세한 내용을 다시 알아보도록 하겠습니다.1. 기본 문법(1) main() 함수 (프로그램의 시작점)모든 Dart 프로그램은 main() 함수에서 시작됩니다.void main() { print("Hello, Dart!");}print() 함수는 콘솔에 문자열을 출력하는 함수입니다.(2) 변수와 데이터 타입Dart는 var, final, const를 포함한 여러 변수 선언 방식을 제공합니다.void main() { int age = 25; // 정수 double height = 178.5; // 실수 String name = "Da..

Dart 실습 환경

안드로이드 스튜디오 Dart 실습 환경 만들기안드로이드 스튜디오는 Flutter와 Dart 개발을 지원하는 공식적인 IDE 중 하나입니다.Flutter 프로젝트를 만들지 않고 순수한 Dart 코드를 실행하는 방법도 제공하므로, Dart를 학습하기 좋은 환경입니다.1. 안드로이드 스튜디오에서 Dart 개발 환경 설정(1) 안드로이드 스튜디오 설치먼저 안드로이드 스튜디오가 설치되어 있어야 합니다.아직 설치하지 않았다면 공식 다운로드 페이지에서 다운로드하세요.(2) Dart SDK 설치Flutter를 설치하면 Dart SDK도 자동으로 설치됩니다.하지만 Dart만 단독으로 사용하려면 Dart SDK를 별도로 설치해야 합니다.Dart SDK 설치 방법 (Windows, macOS, Linux)Dart 공식 사이..

Dart 알아보기

Flutter 모바일 개발을 위해 Dart를 이해하는 것은 매우 중요합니다. Flutter는 Google이 개발한 Dart 언어를 사용하여 UI를 빌드하고, 모바일 앱을 개발하는 데 최적화된 언어입니다.Dart에 대한 기본 개념부터 Flutter 개발에 필수적인 내용을 정리해 보겠습니다.Dart의 역사Dart는 Google이 개발한 프로그래밍 언어로, 웹 및 모바일 애플리케이션 개발을 목적으로 설계되었습니다. Dart의 발전 과정과 주요 변화들을 정리해 보겠습니다.1. Dart의 탄생 (2011년)발표일: 2011년 10월 10일개발사: Google목적:JavaScript의 대체 언어로서 웹 개발을 쉽게 만들기 위함정적 및 동적 타입을 모두 지원하는 유연한 프로그래밍 언어 제공Dart 최초 발표자:Lar..

728x90