안녕하세요. 오랜만에 인사드립니다!
저는 3월 4일에 출시한 앱때문에 이 앱에 집중하느라 한동안 블로그 운영을 못했네요 ㅠㅠ 죄송합니다!
요즘 제가 운영중인 앱은 Flutter/Dart를 이용하여 개발하고 있습니다.
저는 원래 C언어가 주력 개발 언어였다보니 Dart에 적응이 쉽지는 않지만…
그래도 기본적으로 C언어,Java,Kotlin,Python,어셈블리어(x86/64) 등 다양한 언어 경험을 이미 가진 상태였기에 Dart 적응도 생각보다 빠르게 하고있는 것 같아 다행입니다.
오늘도 어김없이 Dart로 개발 중 전혀 이해가 안되는 문법이 나왔습니다.
그 문법이 무엇이냐!?
바로바로…
Dart의 스프레드 연산자(…)입니다.
저는 여러 컴퓨터 개발언어 경험이 있다보니 모르는 문법을봐도 대강 전체 코드 맥락을 보고 추측할 수 있는 편인데
저 문법은 봐도 정확히 추측이 잘 안되더라구요..
그래서 어떤 문법인지 자세히 들여다 보았습니다.
목차
1. Spread 연산자(…)는 언제 나온 문법인가?
Dart는 스프레드 연산자라는게 원래 없었던 걸로 기억하고 있었는데
알고보니 제가 몰랐던거지 실제로는 Dart 2.3에 도입되었다고하니.. 정확히는 2019년 9월쯤에 나온 문법이라고 하네요.
결론은 제가 몰라서 안쓴 문법인거지 실제로는 꽤 오래된 문법이었네요 ㅎㅎㅎ..
2. Spread 연산자(…)란?
리스트나 컬렉션 같은 데이터를 “펼쳐서” 그대로 넣는 문법이에요.
예를 들어 A리스트에 B리스트를 끼워넣거나 여러 리스트를 한꺼번에 합치거나 할때 쓰는거에요!
글로만 보면 이해가 어려우니 코드로 예시를 들어보겠습니다!
dart
var a = [4,8,6];
var b = [0, ...a,4]; //b 리스트 변수내에 스프레드 연산자 사용!
print(b);위 코드를 보시면 b라는 변수에 스프레드 연산자(…)이 들어간게 보이시죠?
저는 처음에 저 코드를 보고 코드 실수인줄 알았답니다 ㅋㅋ..;
코드 결과를 보면 어떤 연산자인지 쉽게 이해되실거에요!
코드결과
=> [0,4,8,6,4]
코드 결과를 보니 쉽게 이해되시지 않나요? (저만 그런건가..?)
여하튼 이 연산자 덕분에 리스트끼리 합치는게 너무 편리해졌어요!
3. Spread 연산자(…)가 없었을 때는 어떻게 리스트끼리 합쳤었을까?
스프레드 연산자(…)가 없었을떄는 리스트끼리 합치는게 정말 귀찮았었어요.
그 당시 주로 사용되었었던 리스트 합치는 방법은 아래 3가지 였던 것 같아요.(그 외 추가 방법이 있을지도 모르겠지만… 다른 방법은 안써봐서 모르겠어요!)
3-1. addAll함수 사용하기
많은 개발자님들이 사용했었던 가장 대표적이고 무난했었던 방법입니다.
하지만 전 2번 방법을 주로 썼었어요.
dart
var a = [4,8,6];
var b = [0];
b.addAll(a); //addAll함수 사용!
print(b);
코드 결과
=> [0,4,8,6]
참고)b.addAll(7); 과같이 정수형 7을 넣으면 아래와 같은 에러가 발생합니다.
The argument type ‘int’ can’t be assigned to the parameter type ‘Iterable’. ‘Iterable’ is from ‘dart:core’.
즉, addAll함수에 정수형 데이터는 매개변수로 넣을수 없다는 뜻이죠.
3-2. “+연산자” 로 병합하기
리스트끼리 합칠 때 또 자주 많이 사용했었던 방법은 “+연산자” 입니다.(개인적으로는 이 방법을 가장 많이 썼었습니다. 아무래도 C언어가 첫 개발언어였다보니 이런 코딩 방식이 익숙해서 그런 것 같아요!)
var a = [4,8,6];
var b = [0] + a + [4];
print(b);코드 결과
=> [0,4,8,6,4]
3-3. List.from + cascade연산자 + addAll함수 사용하기
개인적으로 이렇게 한줄에다가 함수를 이어서 코딩 방식을 싫어하는 편입니다만… 어떤 개발자님들은 이런 방식의 코딩을 좋아하더라구요 ㅠㅠ(주로 파이썬으로 코딩을 시작하신분들이 이렇게들 많이 하시더라구요!)
하지만 협업을 위해서는 다양한 코딩 방식을 이해할 수 있어야겠지요…
var a = [4,8,6];
var b = List.from([0])..addAll(a)..add(4);
print(b);코드 결과
=> [0,4,8,6,4]
List.from을 이용하면 새 리스트를 만들 수 있어요!
List.from([0])이라고 하였으니 [0]이라는 새 리스트가 생성된거에요.
참고)뒤에 ..(케스케이드(cascade) 연산자)가 나왔는데 모르시는분들은 일단 넘어가시면되세요! 추후 제가 따로 이 연산자를 주제로 다뤄드리께요!
결론은 List.from([0])..addAll(a)..add(4)란?
[0]이라는 리스트를 생성 -> addAll함수를 통해 a 변수를 합치기-> add함수를 써서 정수형 데이터 4 합치기(addAll에는 정수형을 쓸수없기때문에 add 함수를 쓴 것임!)
란 뜻이에요.
오늘은 요기까지! 끝!
비버코딩을 찾아주시는 분이 많지는 않지만! 그래도 적은 분들이라도 지속적을 봐주시고 있다는 것에 정말 감사의 말씀드립니다!
그래서 계속 방치해두는건 좀 그런 것 같아서 오랜만에 인사드렸습니다!
그런데 그냥 인사만 드리고 가는건 또 뭔가 이상한 것 같아서 간략 근황 토크 + 갑자기 생각난 최근에 배운 spread 연산자에 대해서도 알려드려보았습니다. 앞으로는 아무리 바빠도 최대한 방치를 줄이고! 일주일에 1~3개 정도의 글을 쓰도록 노력해보겠습니다! 읽어주셔서 감사드립니다 ~~^~^v