[Flutter] Collection & Generic

비나·2022년 11월 3일
0

Flutter

목록 보기
7/16
post-thumbnail

📌 Collection & Generic

오늘 공부한 부분은 Collection과 Generic 부분 Dart 문법 정리이다.
어쨌든 Flutter를 공부하려면 Dart를 공부할 필요가 있으니, 강의에서 나오는 기본 문법을 틈틈히 봐야겠다.
Javascript랑 비슷한 느낌이다.




✅ String interpolation

String interpolation은 번역하면 보간법인데,
문자 중간에 변수를 끼워 넣는 것이다.

가령 String 타입으로 name 변수가 있고, 여기에 값을 넣었다고 치자.
그럼 print(name); 이렇게 하면 값이 출력이 된다.
그런데 이걸 이제 다른 문자를 쓰고 중간에 출력하고 싶다 하면 아래와 같이 한다.
중간에 $변수명 이렇게 넣어주는 것이다.

void main() {
  String name = 'Mei';
  print("my name is $name, nice to meet you");
}

이런 방법은 (알고는 있겠지만) 앱을 만들 때,
사용자 별 이름이나, 뭐 나이 성별 기타 등등,, 바뀔 내용 있을 때 쓴다.


✅ Collection

Collection은 데이터들을 모아서 가지고 있는 자료구조이다.
예를 들면, List, Set, Map 등이 있다.

이 중에서 List를 보도록 하자.
List의 종류는 2개로 나누어 볼 수 있다.

1) fixed-length list : var num = new List(5) // 리스트 길이 제한 5
2) growable list : var num = new List() // 제한 없음

리스트 구현은 간단히 아래와 같이 할 수 있다.

// List에 다양한 데이터 타입을 저장할 수 있음, bool 타입도 가능
void main(){
  
  var number = new List(); // 타입 추론 기능으로 var타입이어도 List로 구현
  
  number.add(2);
  number.add('test');
  number.add(7.4);
  
  print(number);
}

그런데 var 타입으로 해주는 것보다 List 타입으로 정확히 해주면 오류를 줄일 수 있다.

void main(){
  
  List<int> number = new List();	// int 타입만 가능하도록 List 선언
  
  number.add(2);
  number.add('test');	// 오류남
  number.add(7.4);	//오류남
  
  print(number);
}

✅ Generic

Generic은 Collection이 가지고 있는 데이터들의 데이터 타입을 지정하는 것이다.
아래처럼 <> 안에 넣어서 Generic 타입 지정 가능하다.

// <>안에 List에 들어갈 데이터 타입을 지정
List<int> number = new List();
List<String> name = new List();

이렇게 <dynamic>으로 타입 지정하여 여러 타입이 가능하게 하는 것보다
정확히 지정해주는 것이 오류날 일이 줄어드니까 더 좋다.

Generic 기법의 가장 큰 장점은 코드를 더 간결하게 작성할 수 있다는 것이다.
네모 모양에 네모박스, 동그라미 모양에 동그라미 박스를 밀어 넣는 코드를 Generic을 사용하는 경우와 아닌 경우로 작성하여 비교하여 보자.


🌟 w/o Generic

void main() {
  
  var circleSlot = new CircleSlot();
  circleSlot.insert(new Circle());
  
  var squareSlot = new SquareSlot();
  squareSlot.insert(new Square());
  
}

class Circle {}
class Square {}
// 만약 세모 모양의 슬롯을 만들어 세모를 넣는 경우
// 세모 클래스와 세모 슬롯 클래스를 모두 만들어주어야 한다.
class Triangle {}

class CircleSlot {
  insert (Circle circleSlot){
    
  }
}

class SquareSlot {
  insert (Square squareSlot){
    
  }
}

// 만약 세모 모양의 슬롯을 만들어 세모를 넣는 경우
class TriangleSlot {
  insert (Triangle TriangleSlot){
    
  }
}

🌟 w/Generic

void main() {
  
  var circleSlot = new Slot<Circle>();
  circleSlot.insert(new Circle());
  
  var squareSlot = new Slot<Square>();
  squareSlot.insert(new Square());
  
}

class Circle {}
class Square {}
// 만약 세모 모양의 슬롯을 만들어 세모를 넣는 경우
// 세모 클래스만 추가해 주면 된다.
class Triangle {}

class Slot<T> {
  insert (T shape){
    
  }
}



📌 마무리

오늘 진짜,, 대학원 수업도 없고 해서 많이 공부할 줄 알았는데 ㅎ
변명을 하자면, 컨디션 넘 안좋다,, 자도자도 피곤하다.
역시 밤에 깨어있는게 편한 나에게 아침 6시 기상은 너무 힘들다.
그래도 다담주면 평일에 늦잠 자도 된다..
그래도 오늘은 강의 많이 못듣긴 했어도, 이번주에 코딩셰프 Flutter 순한맛 시즌 1 강의를 다 들을 수 있을 것 같다.
Flutter 책도 하나 구매했는데, 다음주부터는 강의들으며 책도 좀 봐야겠다.
오늘 하루도 짧은 정리지만 포스팅 완료 🥱☄️




참고
- Flutter
- Dart packages
- 코딩셰프 Flutter 담백한 맛
- 코딩셰프 Flutter 순한맛 시즌1
profile
아자아자 코딩라이푸 ٩(๑❛ʚ❛๑)۶

0개의 댓글