내일배움캠프_App창업_일지

Dart 심화 문법, 함수형 프로그래밍과 Dart(7-13강)

loopkoi 2025. 6. 24. 17:28

Collection(List, Set, Map)

 

List

List<타입> 변수이름 = [ 요소 ];

 

변수이름 = [ 요소 ]; 도 가능 (타입 추론 가능)

요소에 변동이 있는 경우는 변수이름 앞에 var로 선언하고,

없는 경우는 final 이나 const로 선언 가능

 

index를 통해 각 요소에 접근 하고 바꿀 수 있음

removeAt은 index를 찾아서 제거
한 개 넣을 땐 add, 여러 개 넣을 땐 addAll


 

Set

Set <타입> 변수이름 = { 요소 } ;

변수이름 = { 요소 } ;

List와 마찬가지로, 타입을 지정해주지 않고 var로 선언하면 오류가 나지 않긴 함(object로 추론함) 그래도 같은 타입으로 쓰는 걸 추천

순서 x 즉 index가 없다.

과제에서 쓸 듯

 

 

Map

Map<key타입, value타입> 변수이름 = {key : value}; 

변수이름 = {key : value}; 

 

요소에 변동이 있는 경우는 변수이름 앞에 var로 선언하고,

없는 경우는 final 이나 const로 선언 가능

 

var numbers = { }; <- 이거는 set이 아니고 map 빈 거.

 

키끼리 값끼리 타입이 같아야 함

(List, Set과 마찬가지로 var, final, const로 선언하면 object로 추론하기 때문에 오류 안 나긴 함.)

 

키는 중복 될 수 없지만 값은 중복 될 수 있음.

 

map에 없는 key를 넣으면 오류가 나진 않고 null이 반환됨

 

add를 안 쓰고 추가

 


열거형

enum 열거형이름 { 요소 }

* 값 추가나 제거가 불가함.

Color를 타입으로 봄. int string 이런 것처럼. red는 저 타입 안에 들어있는 값
열거형은 switch문이 잘 맞음

 

 

 

 


 

함수

 

반환타입

함수이름

매개변수

실행할 코드

반환값

 

코드블록이 한 줄만 간결할 때만 => 쓸 수 있음

 

* 타입추론이 가능하기 때문에 반환 타입과 매개변수 타입을 생략가능하지만 권장x

 

함수를 호출해준다고 표현

 

함수의 효율성

 

제네릭(Generics)

클래스나 함수에서 데이터 타입을 일반화 하여 다양한 타입을 지원할 수 있게 하는 기능

 

사용하는 이유: 특정 타입에 의존하지 않고 여러 타입에 동일한 코드를 적용 가능 -> 재사용성 높음 

아래는 generic 함수를 이용해서 효율적으로 코드를 짠다.

제네릭은 타입추론이 안 되고 타입을 반드시 명시해야 한다????


객체지향 프로그래밍

함수형 프로그래밍

비동기 프로그래밍함수형 프로그래밍에 대해 알아 보자.

 

함수의 연속(메서드 체이닝 method chaining)으로 프로그램을 구성하는 방식

.을 사용해서 여러 개의 함수를 하나로 연결

 

과제에서 쓸 듯!!!
contains()는 bool 타입을 리턴하는 함수 '이 안에 특정값이 들어있냐?'

 

가변적인 데이터 사용을 최소화: 출력값이 항상 그 함수의 매개변수(입력값)에 의존 -> Pure fuction

즉 함수를 기준으로 함수 밖에 있는 변수를 사용하지 않음 -> 부작용이 드물다

pure function

 

increaseNumber는 순수함수 x -> 명령형 프로그래밍 방식
\n 은 출력이 될 때 줄바꿈이 됨. 그냥 팁


함수형 프로그래밍에 많이 사용하는 함수?

형변환 함수(Type Casting Function)

형번환 함수의 종류

 

int.parse에 대해 알아보자. (double.parse는 비슷하므로 내용 생략)

 

 

오류가 안 나고 Null값을 반환하므로 안전하게 사용할 수 있음. 마지막 줄만 int.parse와의 차이점. 그럼 이걸 안 쓸 이유가 뭐지? 흠.. 참고로 double.tryParse도 있음.

 

 toList에 대해 알아보자.

특정 Collection 타입의 값을 List 타입으로 변환한 값을 반환함.

당연함

 

 toSet에 대해 알아보자.

중복값이 있으면 중복값을 제외한 set을 반환함.

 

역시 Map에는 적용 불가.

 

 asMap에 대해 알아보자.

List의 index가 key로 자동으로 할당됨

 

그렇다면 Set은? 

Set은 index가 없기 때문에 Map으로 변환 불가......이지만 방법은 있음.

요렇게 꼼수 이용ㅋㅋ 그러면 이제 얘를 메서드 체이닝을 이용해 코드를 바꾸면
훨 간결해짐
왜 asMap만 as인지 궁금해져서 찾아봄.

 

 

 

고차 함수(Higher-order Function)

함수를 다루는 함수, Collection 타입의 데이터에 있는 요소를 처리하거나 변환할 때 씀.

고차함수의 종류

 

map()에 대해 알아보자.

map은 Collection 타입인 데이터의 각 요소에 특정 함수를 적용한 새로운 Collection 타입의 데이터를 반환함.

(뭔말이여)

새로운 결과를 만든다? 는 개념인 듯? 

반복문 비슷한 개념

 

return 뒤에가 간결해서 => 요거 쓸 수 있음

 

특징: 

원본 데이터를 직접 가공하지 않고, 특정 함수를 적용한 새로운 데이터를 반환함

원본 데이터와 크기가 같은 데이터 반환

 

 

 

 

where()에 대해 알아보자. (필터링 개념)

특정 조건에서 참인 요소들만 반환함.

 

역시 한 줄로 표현 가능

 

특징: 

원본 데이터를 직접 가공하지 않고, 특정 함수를 적용한 새로운 데이터를 반환함(상동)

 

* 참인 요소가 없으면 빈 값을 반환함.

 

 

firstWhere()에 대해 알아보자.

위에 거랑 같고, 참인 요소들 중에 첫번째 요소를 반환함.

간결 버전.

* 참인 요소가 없으면 오류 발생

 

lastWhere()에 대해 알아보자.

위위에 거랑 같고, 참인 요소들 중에 마지막 요소를 반환함.

나머지는 firstwhere와 같으므로 생략한다.

 


 

reduce()에 대해 알아보자.

데이터 요소들을 하나의 값으로 결합

 

매개변수가 두 갠데 생긴 게 이렇다는데. 반복문인가?

 

 

 

맞는 듯.

 

특징

Collection 타입과 같은 타입으로만 반환 가능

Collection타입의 데이터에 요소가 없는 경우 오류 발생

 

 

fold()에 대해 알아보자.

reduce랑 비슷. 근데 얘는 초기값이 들어감.

 

얘는 주어진 초기값에다가 데이터 값이 할당 됨

 

특징(fold와 반대임)

Collection 타입과 다른 타입으로도 반환 가능

그렇다면 초기값 없이 다른 타입으로 반환하고 싶으면 초기값 자리에 null? 값 넣으면 되나?

빈 칸도 글자수로 쳐준다.

 

Collection타입의 데이터에 요소가 없는 경우 오류 발생 x, 초기값을 반환하면 되기 때문 -> 에러가 덜 발생하겠군

 

 

 

any()에 대해 알아보자.

하나라도 주어진 조건을 만족하면 true를 반환함

수학이군ㅋㅋ

 

 

every()에 대해 알아보자.

모두 참일 경우에만 true를 반환함.

 

 

 

takeWhile()에 대해 알아보자.

데이터 요소들을 주어진 조건에 넣었을 때 참이 되는 동안은 반환하고 거짓이 되는 순간부터 무시함.

break이랑 비슷한 건가?

 

 

skipWhile()에 대해 알아보자.

참이 되는 동안은 무시하고 거짓이 되는 순간부터 반환 (위에 거랑 반대 개념)

 

* 뒤에 거 중에 참이 있어도 반환함

 

 

 

이제 배운 것들을 조합해 보자. 벌써 다 까먹은 듯

요게 지금까지 배운 고차함수.

 

 

아래 예시는 where, map, reduce(물론 fold도 가능) 세 개 쓴 거임.

number * number 는 제곱한 것

 

 

 

 

역시 fold 대신 reduce 가능