반응형

Dart Map에 대해 알아보자

지난 시간 List 스터디에 이어, 이번에는 다트의 Map에 대해서 스터디 해보았다.

관련 소스는 아래와 같이 첨부한다. (주석과 함께 읽어내려가면서 코드를 실행하고, 이해하는것이 좋다.)

void main() {
  //08. Map 타입
  //Map은 key value pair방식이다. (한쌍,짝)
  //Map은 List의 대괄호와는 반대로 중괄호를 사용한다.
  //콜론을 기준으로 왼쪽은 키, 오른쪽은 밸류로 인식한다.
  //여러값을 넣고 싶으면 콤마를 기준으로 추가한다.
  Map dictionary = {
    'apple': '사과',
    'banana' : '바나나',
    'watermelon' : '수박'
  };
  
  print(dictionary);
  
  //key값을 넣으면 원하는 value값을 추출할수 있다.
  print(dictionary['apple']);
  
  
  //이번에는 선언 후, 값을 추가하는 방법에 대해 알아보자.
  Map dictionary2 = {};
      
  print('------------');
  print(dictionary2);
  
  dictionary2.addAll({
    'apple': '사과',
    'banana' : '바나나',
    'watermelon' : '수박'
  });
  
  //위와같이 선언 후에 값을 일괄로 할당할 수 있다.
  print(dictionary2);
  
  //만약 들어있는 값 중 특정값을 삭제하고 싶다면?
  //아래와 같이 remove함수를 사용하여 삭제할 수 있다.
  dictionary2.remove('apple');
  
  print(dictionary2);
  
  
  //그렇다면, 변경은 어떻게 할까?
  //변경은 List와 같다. List에서 Index를 사용했지만
  //Map은 Key값을 사용한다.
  
  dictionary2['banana'] = '버내너';
  //할당한 값대로 변경된것을 확인할수 있다.
  print(dictionary2);
  
  //List는 Index를 사용하지만, Map는 Key값을 사용한다는 것을 알수있다.
  
  
  //이번에는 List에서 다뤘던 2가지 선언방법 중 new를 사용한 선언방법처럼
  //Map도 new를 사용하여 선언해보자.
  
  Map dictions = {};
  
  Map distions2 = new Map();
  
  Map dictions3 = new Map.from({
    'apple' : '사과',
    'banana' : '바나나'
  });
  
  //List처럼 .from 을 이용하여 할당도 가능하다.
  print(dictions3);
  
  //또한 이 Map으로 사용된 것을 List형태로 변경도 가능하다.
  //toList앞에 Keys는 Map의 Key값만 List화 하라는 것을 의미한다.
  print(dictions3.keys.toList());
  
  //value만 프린트 하고 싶다면 어떻게 할까? Keys와 반대로.
  print(dictions3.values.toList());
  
  //위와같이 변경한 뒤부터는 List처럼 사용할수 있는것이다.
  
  //지난 List에서는 안에 들어갈 값의 타입을 설정할수 있었다.
  //Map도 가능하다.
  Map<String, int> price = {
    'apple' : 2000,
    'banana' : 4000,
    'watermelon' : 6000
  };
  //위와같이 지정을 할수 있다. 지정을 안해도 무방하지만
  //지정을 하는것이 정확한 데이터의 종류와 개발을 위해서라도 타입을 지정하는게 좋다.
  
  //정말 중요한것. Map에서의 Key는 절대적으로 유니크해야한다.
  //무슨말이냐면, 이미 key값으로 apple이 들어있는 상태에서 또 apple에 다른값을 넣으면
  //List와는 다르게 추가되지 않고, 덮어씌어진다. 
  //반드시 1개만 존재할수 밖에 없다는것을 명심할것.
}

 

실행하였을때, 아웃풋.

{apple: 사과, banana: 바나나, watermelon: 수박}
사과
------------
{}
{apple: 사과, banana: 바나나, watermelon: 수박}
{banana: 바나나, watermelon: 수박}
{banana: 버내너, watermelon: 수박}
{apple: 사과, banana: 바나나}
[apple, banana]
[사과, 바나나]

 

List와 Map 사용시 차이점, 활용방법 , Map을 List로 변경하여 사용하는 방법 등을 잘 기억하자.

 

반응형
반응형

허전해서 구해온 이미지

지난 스터디에서 공부해본 변수선언 타입들과는(var, dynamic, String, int) 다른 형태인

List에 대해서 알아보고자 한다. (아래 소스 첨부함)

혹시나..이 글을 읽고 공부를 하고 있다면, 아래 첨부한 소스를 소설책 읽듯이 한줄씩 읽어내려가면서 

코드를 실행해보면되고, 이해하면서 넘어가길.. 

코드 실행도구에 관해서는  Dart언어공부- 01.HelloWorld

 

Dart언어공부-01.Hello World

Flutter가 요즘 핫하게 올라오면서, Flutter의 주력 언어(다른언어도 가능함)인 Dart를 공부해보려 한다. 간단하게 Flutter란? Google에서 개발하고 Mobile World Congress 2018에서 최초 베타..

masswhale.tistory.com

 

위 포스팅을 참조하기 바라며, 내용이 잘 이해되지 않을땐, 아래 포스팅에 소개된 

유튜버의 dart강의 재생목록을 참고하기 바란다.

 

Flutter개발을 위한 Dart언어 왕초보 강의

Flutter를 이용한 앱개발을 위해 Dart강의를 찾던 중 유튜브에서 기가막힌 강의를 찾아냈다. (혹시 Dart언어에 대해 빠르고 간략하게 기초를 쌓고 싶으신 분에게 추천드림..) 정말 마음에 드는점은

masswhale.tistory.com

 

그럼 스터디한 소스 내용 시작.

//07.List 타입
void main() {
  //기존에는 1가지 변수에 1가지의 값을 할당하였다면
  //이번에 배워볼 List는 여러개의 값을 할당할수 있다고 생각하면 된다.
  //단어 뜻 그대로 바라보자.
  
  
  //List 선언방법 첫번째.
  //(var와는 다르게, List는 대문자로 시작한다.)
  List colorList = [];
  
  //아무것도 들어있지 않은 List가 표현된다.
  print(colorList);
  
  //List 선언방법 두번째.
  List colorList2 = new List();
  
  //위와 같은 형태의 결과값이 나온다.
  print(colorList2);
  
  
  //이렇듯 첫번째 선언방법과 두번째 선언방법은 다를게 없다.
  //같은 문법이고 똑같이 사용할 수 있으며, 의미도 같다.  단 두번째 선언방법을 선택하면 활용가능성이 더 많아진다.
  // 이 부분은 다음 스터디 내용에서 다루자.
  
  colorList.add('red');
  colorList.add('blue');
  colorList.add('orange');
  
  print('-------------');
  //콤마(comma)기준으로 값이 할당되어 나타나는 것을 볼수있다.
  print(colorList);
  
  
  //List Index에 대해 알아보자.
  //Index는 순서라고 알면된다. 
  //일반적으로 사람은 1,2,3...순서지만, 기계는 -1씩뺀다고 생각하자.
  //0,1,2,3,4.....순으로 시작한다.
  //하지만 갯수는 동일하다. 단순히 부르는 순서만 다를뿐이다.
  //이를 Index라 한다. 자리번호정도..?
  
  //실습 start
  //blue값을 제거해보자.
  colorList.removeAt(1);
  print(colorList);
  
  //또한 원하는 각각의 값을 불러오는데에 쓸 수있다.
  //자리번호 첫번째의 녀석을 불러올수 있다.
  print(colorList[0]);
  print(colorList[1]);
  
  //만약 여기서 아래와 같이 세번째(자리번호)를 호출하면 오류가 난다.
  //위에서 removeAt을 이용하여 제거했기 때문이다.
  //print(colorList[2]);
  
  //또 다른 활용방법으론, 자리번호를 호출하여 해당하는 자리의 값을 변경할 수 있다.
  colorList[0] = 'green';
  print(colorList);
  print('----------devide-----------');
  
  
  
  //지금까지 List의 활용에 대해 생성(선언), 추가,제거,변경을 알아보았다. 
  //이번에는 List응용버전에 대해서 확인해 보자.
  
  //아래와 같이 List에 담길 값들의 타입을 지정하여 선언해 보자.
  List<String> colorList3 = [];
  
  colorList3.add('purple');
  print(colorList3);
  
  //여기서 아래와 같이 추가를 하였을땐 오류가 발생한다.
  //위에서는 지정한 타입인 String을 넣었기 때문에 할당부터 출력까지 문제가 없었으나,
  //지정된 타입이 아닌 integer형이 들어왔기 때문이다.
  //colorList3.add(1);
  
  
  //이번에는 길이가 지정되어 있는 List를 선언해보자.
  //(add를 이용하면 메모리가 허용하는 한 무제한으로 들어가버림.)
  
  //3개 이상의 값이 할당되지 않도록 3을 넣어서 선언.
  List<String> fruit = new List(3);
  
  //아래처럼 호출하게 되면, 숫자를 넣어서 제한하기 전과는 다르게 null이라는 값이 3개가 들어가있다.
  print(fruit);
  
  //이유는, 3개의 길이를 가지고 있는 List를 생성하겠다고 지정하였기 때문에
  //생성과 동시에 만들어 버린것이다.
  
  //만약 여기서 .add('값'); 을 사용한다면 오류가 발생한다.
  //이미 3개만 할당하여 null이란 값이 채워져있기 때문이다.
  
  //이럴땐, index를 활용하여 수정한다.
  fruit[0] = 'apple';
  fruit[1] = 'banana';
  fruit[2] = 'grape';
  print(fruit);
  
  
  print('----------devide-----------');
  
  
  //이번에는 값을 넣은채로 선언하는 방법을 살펴보자.
  List alphabet =  ['A','B','C','D','E'];
  print(alphabet);
  
  
  //두번째 선언방법인 new 를 이용하면 어떻게 할까?    
  //아래와 같이 List.from 을 활용하여 같이 사용할 수 있다.
  List alphabet2 = new List.from(['A','B','C','D','E']);
  print(alphabet2);
  
  //*tip 길이를 알아볼수 있는방법
  print(alphabet2.length);
  
}

 

결과 OUTPUT (반드시 코드를 직접 작성해 보면서 결과를 비교하고, 기억할 것.)

[]
[]
-------------
[red, blue, orange]
[red, orange]
red
orange
[green, orange]
----------devide-----------
[purple]
[null, null, null]
[apple, banana, grape]
----------devide-----------
[A, B, C, D, E]
[A, B, C, D, E]
5

 

이 다음번 스터디 부터는 map에 대해서 알아보고자 한다.

그럼 오늘의 스터디는 여기서 끝.

반응형
반응형

이번 스터디 부터는 내용이 쫌 길다.

듣고있는 강의의 시간이 점점 길어지면서 그냥 바로 Flutter로 넘어가고 싶지만...

아무리 경력개발자여도 기초는 무시하면 안되는 법....

이번 포스팅은 선언자에 관한 내용.

정해진 값이 명확하지 않을때 사용하여 최초 할당된 값에 따라 변화하는 var타입과

단어 그 자체로 변동성이 있는 dynamic에 대해서다.

자세한 건 아래 코드블럭을 참고하고, 아래 dart 구문을 돌리기 위한 준비물인 웹컴파일러는 

첫번째 포스팅을 참조바람 => Dart언어공부- 01.HelloWorld

 

//06.var, dynamic 타입
//언제나 그렇듯 자바의 psvm처럼 main부터 시작.
void main() {
  //기존처럼 var로 선언하여 문자열 할당.
  var name = '임의값';
  print(name);
  
  //이번에는 var로 선언하여 숫자값을 할당
  var number = 2;
  print(number);
  
  
  //문자열로 사용하겠다고 선언 후, 숫자값을 할당한다면 당연히 불가능하다.
  //String number2 = 2;
  
  //var선언자는 내가 할당한 값에 의해 타입이 정해진다.
  
  //위에 var로 선언 후, 다시 문자열을 재할당 해보자.
  name = '임의값 변동';
  //문제없이 변경된 값으로 추출된다.
  print(name);
  
  //이번에는 숫자값을 넣어보자.
  //해당변수를 처음 선언 후 할당된 값은 문자열.
  //숫자값을 할당하려 하면 당연히 오류가 발생한다.
  //이미 name변수는 문자열 타입으로 지정되었기 때문.
  //name = 1;
  //print(name);
  
  
  
  //이번에는 dynamic이라는 선언자를 살펴보자.
  dynamic _name = '다이나믹값';
  //var선언자를 사용했을때 처럼 문제없이 출력된다.
  print(_name);
  
  //var타입에서는 아래처럼 숫자를 넣었을땐 오류가 발생했지만
  //dynamic선언자를 사용하면 오류없이 값의 종류를 바꿀수 있다.
  //dynamic은 이 처럼 할당된 변수값의 종류에 영향없이 타입이 변경되는 선언자라고 할수있다.
  _name = 1;
  print(_name);
    
  //그런데 var선언자의 한가지 특이한 점이 있다.
  //var를 사용하는데, 이번에는 변수를 할당하지 않고 선언해보자.
  var _named;
  
  _named = 'dynamic?';
  print(_named);
  
  //최초 선언시 값을 할당해주면, 타입이 지정되지만 (초기화하지 않는다고 표현함.)
  //그렇지 않고 이 후에 값을 지정해주면 마치 dynamic처럼 값의 타입이 변동된다.
  
  //위에 문자열을 넣었지만, 아래와 같이 숫자값을 넣는다면?
  _named = 1;
  //문제없이 기능이 동작한다.
  print(_named);
  
  //그러면, int나 String, double이런거 없이 그냥 편하게 var나 
  //아니면 더 간단하게 dynamic로 쓰면 되는거 아닌가? 하겠지만
  
  //프로그램을 만들다 보면 선언된 변수를 사용할 때, 숫자로 처리되어야 하는
  //변수값이 갑자기 문자열로 변경이 된다거나, 하는 일이 발생될수 있다.(오류발생)
  //또한 추후 내가 유지보수를 하거나 다른사람이 봤을때, 용도의 명확성을 알려주기 위해서도
  //확실한 선언자를 사용하는것이 좋다.
  //물론 내 생각이기도 한데, 대부분의 회사가 그렇게함.
  
}

 

자 그럼 결과물은?

임의값
2
임의값 변동
다이나믹값
1
dynamic?
1

다음 공부는 기다리고 기다리던 자료구조다.

처음엔 다른언어 기초부터 다시 배울생각에, 막막하기도 하고 지루할거같기도 했는데

막상해보니 재밌다.

 

한가지 진짜 확실한 건, 언어 한가지만 제대로 해두면 다른 언어 배우는 속도는 2배인거같다.

(프로그래밍 언어에 한함..)

반응형
반응형

지난 포스팅 "Dart언어공부-04.자료형(문자)"에 이은 이번에는 참과 거짓을 표현하는 boolean 에 대한 공부.

스타트.

여태 공부했던 숫자형 int, double과 문자형 String 외에

참과 거짓을 표현하는 boolean타입의 자료형이 있다.

사용은 true와 false두가지를 사용한다.

자세한건 아래 코드블럭 참고.

※준비물(웹컴파일러)은 Dart언어공부- 01.HelloWorld 포스팅에 가보면 써있음.

//05.자료형 Boolean true or false
void main() {
  //글자의 경우 따옴표 안에 처리하지만, boolean 참 거짓 값은 아래와 같이 할당한다.
  //대문자도 안된다. 소문자로 처리한다.
  bool isTrue = true;
  bool isFalse = false;
  
  print(isTrue);
  print(isFalse);
}

 

결과물은?

true
false

 

지금 당장은 변수에 담아서 어디에 쓰지? 라는 생각이 들 수 있다.

주로 if문 같은 조건문에 사용하게 되는데, 조건문은 다다~음 공부에 포함될 예정.

 

 

반응형

+ Recent posts