우당탕탕 무작정 앱 개발하기

일반인의 Flutter 앱개발 12. Dart(async 였지만 Functional Programming 형변환)

간다간다숑간다 2022. 10. 13. 18:12
728x90

 

Stream 포스팅 예정이었던 오늘

오늘 첫 번째 주제는 Stream 값 변형하기였다. 열심히 듣고 있는데

지난번 시간에 배웠던 'Functional programming'을 언급하면서

이 내용을 녹여내며 코딩을 하셨다. 물론 그냥 무시하고 하려고 했으나

여러분 지금 where()에 대해서 이해하고 계신가요? 저는 아니라 눈물을

머금고 함수형 프로그래밍 강의로 돌아왔습니다.

싸던 거 끊고 밥 먹으러 간 기분이라 영 찝찝한데 포스팅 내내

함수형 프로그래밍에 대해 설명하려고 하니

'이왕 이렇게 된 거 기본적인 거는 알고 가자'라는 생각에

함수형 프로그래밍으로 급선회했습니다.

oop를 배우고 왔다면 별로 어렵지 않다고 약속한다고 한다 힘 내보자

저와 같이 함수형 프로그래밍에 대해 쉽고 재미있게? 시작해보시죠 호호호 ㅠ


 

형 변환

List를 다른 형으로 변환하는 걸 연습해보자.

우리가 이미 List를 썼었기 때문에 위에 보이는 결괏값은 어렵지 않게 생각할 수 있다.

이제 이것을 Map으로 바꿔보자.

혹시 Map이 뭐였는지 가물가물한 사람? 바로 나야 나.

그래서 공부하려 이전 포스팅을 열어봤는데 부끄럽게 거기서도

Map이 기억이 나지 않아 이전 포스팅을 열어봤다고 했다. 며칠 전에도 한결같던 나^^

2022.10.05 - [우당탕탕 무작정 앱 개발하기] - 일반인의 Flutter 앱개발 4. Dart(String, Library, Final, Const, List, Set, Map)

 

일반인의 Flutter 앱개발 4. Dart(String, Library, Final, Const, List, Set, Map)

이번엔 좀 가볍다! 물론 제대로 파고들면 더 많은 내용이 있겠지만 이 정도만 알고 넘어가면 되겠다 싶은 내용이라 할만했다. 어떤가? 지난번 Control Flow 보다 훨씬 간단해 보이지 않는가? 이미 우

trythison.tistory.com

asMap()이라는 메서드가 기본으로 제공되는데 이것을 통해 간단히 형 변환을 할 수 있다.

 

map으로 형변환 끝

이번엔 set로도 변형이 가능하다. set가 뭐였는지 가물가물한 사람? 바로 나야 나.

찾아보기 위해 이번 포스팅을 뒤적거렸는데 놀랍게도(정말 놀라운 건 며칠 만에 까먹은 나 놈)

아까 열었던 포스팅에 그대로 set가 있었다.

set는 중복이 안 되는 List라고 하면 바로 생각이 나실 거다!

간단히 set 형 변환 성공

 

다음은 반대의 경우도 생각해보자 map을 일단 만들어주고 어떻게? 

blackPink.asMap() 함수를 통해 Map BlackPinkMap이라는 변수에 박아버렸다.

아... 아주 신박하다. 나는 Map 하나하나 만들어 주려고 했는데 asMap이라는 함수를 통해 그냥 해버리네??

테스트를 위한 출력은 'keys'와 'values' 통해 간단히 볼 수 있다.

그런데 괄호가 소괄호다. 지금 까지는 중괄호 대괄호만 봤었다. 그래서 keys에 마우스를 올려놓고 살펴보니

'Iterable'이라고 나오는데 이건 그냥 일종의 List 같은 형태다. 우리는 실제로 Iterable형태를 잘 안 쓰고 List형태로 쓰거나 다른 형태로 쓰기에 이것을 List형태로 바꿔줄 수 있다.

toList()를 이용해 아주 간단히 바꿔보았다. 결과는

짠! 소괄호가 대괄호로 바뀌었다. ^^ 이게 무슨 쓸모가 있는지 하나도 마음에 와닿지 않는 중

set로도 바꿔보자.

아니 왜 아까는 'toSet'처럼 쉽게 바꿨는데 이번에는 'Set.from(blackPink)' 쓰는가??

아니 왜 바꾸는 방법을 Set은 저렇게 따로 만들었나?!!!!! 하고 아까 한 방법처럼 밑에도 적어보았다.

결과는

그렇다. 둘 다 된다.^^ 화내서 미안하다. 여러 가지 방법을 보여주기 위함이었나 보다.


List mapping (Map<key, value> 아님 주의)

Map method에 대해서 알아보자.

List에는 map()이라는 method가 있는데 이 method는 'Iterable'형태이며 함수를 parameter로 받는다.

와 이게 뭔 얘기인가. 벌써부터 화가 나려고 한다.

하지만 어려울 거 없다고 한다. 믿어보고 계속 공부해본다.

parameter로 쓴 함수에 x라는 parameter를 넣었더니 사진과 같이 오류가 없이 잘 된다.

우리는 이 map이라는 걸 통해 멤버 이름 앞에 '블랙핑크 로제'처럼 블랙핑크라는 말을 써줄 것이다.

'그냥 for 같은 loop문 돌리면 되지 않나?'라고 생각했는데

역시나 코드팩토리 형님은 그걸 알아채시고 functional programming에서는 list map method를 통해

갱장히 간단하게 해결할 수 있다고 한다.

blackPink.map()을 newBlackPink라는 Iterable형태로 받아내고

이름 앞에 블랙핑크를 찍어주는 함수를 만들어 봤다.

이제 진짜 blackPink는 List이고 newBlackPink는 Iterable인지 test 해보자.

홀리... 이게 되네?

마찬가지로 Iterable형태는 잘 안쓰니까

List 형태로 바꿔주면 된다.

그리고 arrow 기억나는가? 기억이 나는 분은 박수 크게 쳐드리고 싶다.

나는? 당연히 안 나서 내 블로그에서 찾아봤다. 역시나 있었다.

2022.10.03 - [우당탕탕 무작정 앱 개발하기] - 일반인의 Flutter 앱개발 2. Dart(함수)

 

일반인의 Flutter 앱개발 2. Dart(함수)

이제 fuction에 대해서 다시 배워보자. 빨간색 동그라미 친 부분을 function으로 바꾸면 예시가 나온다. Comment 기능 1번 줄 짝대기 두 개 '//' 이건 코멘트라는 건데 프로그래밍할 때 컴파일러가 이 부

trythison.tistory.com

무려 10일 전에 했으니 기억이 안 날 법도 하지 않았을까?^^

arrow의 장점 : 코딩을 잘해 보이게 한다. 이거 중요하다 ㅋㅋ 뭔가 그럴싸해 보이게 하는 거 ㅋㅋ


앱 개발하면서 자주 접할 수 있는 버그 중 하나를 잡을 수 있는 법

map 함수를 쓰면 새로운 리스트가 나온다고 했다. 

진짜인지 알아봐 보자.

첫 번째. blackPink 같은 리스트끼리 비교하니 True 출력.

두 번째. newBlackPink == blackPink는 false. 들어있는 값도 다르고 이름도 다르고 아예 다를 거라는 거 예상 가능

세 번째. newBlackPink == newBlackPink2 이건 어떨까? True일거 같은데 false다.

들어있는 값은 같지만 map 함수를 쓰면 새로운 리스트를 만든다고 했으니 false다.

이거 까먹고 있으면 버그로 고생하는 초보 개발자가 많다.


실전 사례

입력받은 String값들에 'xxx.jpg' 들을 붙여주고 싶다고 해보자.

number에는 '1234'라고 붙어있는 숫자를 넣어줬고 String에는 기본으로 split이라는 함수가 있다.

split이 해주는 걸 결과로 보면?

'1234'가 각각 나뉘어서 1, 2, 3, 4로 바뀌었다. 이때 주목할 점은 List 형태로 바뀌었다는 점이다.

그렇기에 출력 값이 [] 형태로 나온다.

우리는 여기에 xxx.jpg를 붙여줘야 하니

위에서 배운 map() 함수를 써서

결과물을 만들어냈더니 Iterable형태로 나왔다. 근데 이 형태는 잘 안 쓰니 List로 다시 바꾸면

아따 힘드네. 여러분 지금 안녕하신가? 괜찮으세요? 전 아니거든요

이런 방법도 있습니다 여러분... 부디 잘 따라오셨길 바라며 이해가 안 되실 경우는 다시 읽어보며

꼭 이해하고 넘어가시기 바랍니다.

 


오늘은 List의 형 변환에 대해 배워봤다. 내일은 Map 관련한 내용이라고 하는데 

하나도 기대가 안된다. 그래도 이걸 모르면 내가 하고 싶은 걸 못하기에

포기하지 않고 하겠다.

난 포기하지 않을 테니 여러분도 끝까지 같이 가기 바란다.

나 같은 사람도 하는데 여러분도 당연히 할 수 있다.

 

아무튼 오늘은 여기까지이며 부디 살아남으시길 바란다.

 

 

틀린 점이나 궁금한 점이 있으면 댓글로 알려달라.
입문자라 아무것도 모르고 이상한 소리를
썼을 가능성이 매우 매우 농후하다.
궁금한 점은 댓글로 토론하며 정답을 찾아보자.
코드팩토리님의  Dart강의를 보고 공부 중입니다.
 

 

728x90