Stream이란?Stream은 '일련의' 비동기 이벤트를 가리키는 것으로, 계산이 종료된 비동기 작업의 결과를 순차적으로 받아오는 역할을 하는 이벤트 큐(event queue)이다. 주요 특징:연속적인 비동기 데이터를 처리한다.이벤트는 값, 에러, 또는 완료(done) 신호일 수 있다.비동기 제네레이터 함수(async*)를 통해 생성된다. Stream 생성 및 사용Stream은 주로 async* 키워드를 사용한 비동기 제네레이터 함수를 통해 생성된다. 코드 분석countStream 함수:async* 키워드로 비동기 제네레이터 함수로 선언된다.Stream를 반환 타입으로 지정한다.yield 키워드를 사용하여 값을 스트림에 전달한다.sumStream 함수:async 키워드로 비동기 함수로 선언된다.awa..
async 키워드async 키워드는 함수를 비동기 함수로 선언할 때 사용한다.비동기 함수를 선언할 때 함수의 body 앞에 async 키워드를 지정한다.비동기 함수의 반환 타입은 Future 클래스로 지정해야 한다. 여기서 T는 실제 결과값의 타입이다.결과값이 없다면 Future결과값이 String이라면 Future await 키워드await 키워드는 비동기 함수를 호출할 때 사용하며, 비동기 작업이 완료될 때까지 기다리도록 한다.await는 async로 선언된 함수 내에서만 사용할 수 있다.비동기 함수 호출 앞에 await를 붙이면, 해당 함수의 실행이 완료될 때까지 기다린다. async/await 사용 예제다음은 async와 await를 사용한 예제 코드이다: 코드 분석createOrderMes..
Future란?Future 클래스는 종료되지 않은 비동기 계산의 결과를 가리키는 것으로, 작업의 결과값을 나중에 받기로 약속하는 것이다.비동기 프로그래밍에서는 작업의 결과를 기다리지 않고 Future'(나중에 결과와 함께 계산이 종료될 것임)를 즉시 반환한다. Future 사용 예제다음은 Future를 사용한 간단한 예제이다: 코드 분석Future.delayed 사용:Future.delayed는 Future 클래스의 네임드 생성자(named constructor)이다.지정된 시간이 경과한 후에 지정된 함수를 수행하는 Future 객체를 생성한다.비동기 함수 정의:fetchOrder1()과 fetchOrder2() 함수는 각각 4초, 2초 후에 메시지를 출력한다.함수의 반환 타입은 Future로, 작업..
동기 프로그래밍동기 프로그래밍은 코드가 순차적으로 실행되며, 각 작업이 완료된 후에 다음 작업이 시작되는 방식이다.주요 특징:코드가 위에서 아래로 순차적으로 실행된다.하나의 작업이 완료될 때까지 다른 작업은 블로킹(blocking)된다.코드의 흐름을 예측하기 쉽다.예제:이 예제에서는 '작업 1', '작업 2', '작업 3'이 순차적으로 실행된다. 비동기 프로그래밍비동기 프로그래밍은 작업의 완료를 기다리지 않고 다음 작업을 실행할 수 있는 방식이다.주요 특징:긴 작업을 시작한 후 즉시 다음 작업으로 넘어간다.작업의 완료 순서가 시작 순서와 다를 수 있다.리소스를 효율적으로 사용할 수 있다.Dart에서 비동기 프로그래밍을 위해 주로 Future, async, await 키워드를 사용한다. 예제:이 예제에서..
enum의 기본 개념enum은 상수 데이터들의 집합이다.주로 특정한 상태나 옵션 값들을 한정적인 선택지로 제공할 때 사용된다. Dart에서 enum 사용하기다음은 Dart에서 enum을 정의하고 사용하는 기본적인 예제이다:이 예제에서:enum 선언: enum Color { red, green, blue }Color라는 enum 타입을 선언한다.enum은 클래스의 일종이므로 함수나 다른 클래스 안에 정의될 수 없다.enum 타입의 color 클래스: Color enum 키워드를 클래스 앞에 선언하면, 해당 클래스는 Enum(열거형) 클래스가 된다.enum의 모든 값 조회: Color.valuesEnum 값을 사용하려면 Enum 클래스 이름과 값 이름을 . 연산자로 연결한다.enum의 모든 열거값 목록을 ..
메서드 호출메서드 호출 방법은 두가지가 있다. 하나는 인스턴스화된 변수에 (.)점을 붙여서 호출하는 방법과, 다른 하나는 인스턴스화된 객체뒤에 (.)점을 붙여 호출하는 방법이 있다. 다음과 같은 클래스가 선언되어있다. 일반적인 메서드 호출은 다음과 같다:두번째 방법을 사용하면 다음과 같이 작성할 수 있다:두 방법의 실행결과는 다음과 같이 모두 같다:안녕하세요, 저는 Alice이고 20살입니다. 여기서 주의할점은 두번쨰 방법 같은 경우는 하나의 메서드만 점(.)을 붙여서 호출할 수 있다. 호출한 메서드 뒤에 다른 메서드를 점(.)을 이어 붙이면 오류가 난다. 캐스케이드 연산자란?캐스케이드 연산자는 인스턴스에서 해당 인스턴스의 속성이나 메서드를 연속해서 사용하는 기능이다.표기법: .. (두 개의 점)목적..
static 기본 개념static 키워드를 사용하면 변수나 메서드가 클래스 자체에 귀속된다.이는 해당 클래스의 모든 인스턴스가 공유하는 요소를 만들 때 유용하다. 주요 특징:클래스의 모든 인스턴스가 공유한다.인스턴스를 생성하지 않고도 접근할 수 있다.메모리 효율성을 높일 수 있다. static 변수 (정적 변수) 예제static 변수는 클래스의 모든 인스턴스가 공유하는 변수다. 클래스의 인스턴스를 생성하지 않고도 접근할 수 있다.이 예제에서 count는 static 변수이므로 모든 Counter 인스턴스가 공유한다. 주의: static 변수는 클래스에 직접 귀속되기 때문에 생성자에서 this.count와 같은 방식으로 초기화할 수 없다. static 메서드static 메서드도 클래스 레벨에서 동작한..
제네릭이란?제네릭은 클래스나 함수 정의를 선언할 때가 아니라 인스턴스화하거나 실행할 때로 타입 결정을 미루는 프로그래밍 기법이다. 주요 특징:특정 변수의 타입을 하나로 제한하지 않고 유연하게 사용할 수 있다.코드 중복을 줄이고 재사용성을 높인다.컴파일 시점에 타입 체크를 할 수 있어 런타임 오류를 줄일 수 있다. Dart에서의 제네릭 사용 예사실 우리는 이미 많은 곳에서 제네릭을 사용하고 있다:여기서 , , 이 바로 제네릭 표현이다. 제네릭 클래스 만들기직접 제네릭 클래스를 만들어 보겠다:이 예제에서:T는 타입 파라미터로, 실제 Box 객체를 생성할 때 구체적인 타입으로 대체된다.Box 클래스는 어떤 타입의 값이든 저장할 수 있다. 제네릭 함수함수에도 제네릭을 적용할 수 있다:이 getFirst 함..
추상 클래스란?추상(abstract)은 상속이나 인터페이스로 사용하는 데 필요한 속성만 정의하고 인스턴스화할 수 없도록 하는 기능이다. 추상 클래스의 주요 특징:직접 인스턴스화할 수 없다.메서드의 선언만 있고 구현은 없을 수 있다 (추상 메서드).일반 메서드와 추상 메서드를 모두 포함할 수 있다.하위 클래스에서 구현해야 할 메서드를 정의한다. Dart에서의 추상 클래스 구현Dart에서 추상 클래스를 만드는 방법을 살펴보겠다.앞서 사용했던 Idol 클래스를 추상 클래스로 변경해 보겠다:여기서 주목해야 할 점:① abstract 키워드 사용: 클래스 선언 앞에 abstract 키워드를 붙여 추상 클래스임을 명시한다.② 생성자 정의: 추상 클래스도 생성자를 가질 수 있다. 이는 주로 하위 클래스에서 supe..
믹스인이란?믹스인(mixin)은 특정 클래스에 원하는 기능들만 골라 넣을 수 있는 기능이다.이는 다중 상속의 일부 이점을 제공하면서도, 다중 상속의 복잡성을 피할 수 있게 해준다. Dart에서의 믹스인 특징선택적 기능 추가: 특정 클래스에 필요한 기능만을 선택적으로 추가할 수 있다.다중 적용 가능: 하나의 클래스에 여러 개의 믹스인을 적용할 수 있다.상속과의 호환성: 특정 클래스를 상속하는 클래스에서도 믹스인을 사용할 수 있다.코드 재사용: 여러 클래스 간에 공통 기능을 쉽게 공유할 수 있다. Dart에서의 믹스인 구현예를 들어, Idol 클래스와 관련된 몇 가지 믹스인을 만들어 보겠다:여기서 주목해야 할 점:mixin 키워드 사용: Singable과 Danceable은 mixin 키워드를 사용하여 ..
