오늘 공부한 부분은 Collection과 Generic 부분 Dart 문법 정리이다.
어쨌든 Flutter를 공부하려면 Dart를 공부할 필요가 있으니, 강의에서 나오는 기본 문법을 틈틈히 봐야겠다.
Javascript랑 비슷한 느낌이다.
String interpolation은 번역하면 보간법인데,
문자 중간에 변수를 끼워 넣는 것이다.
가령 String 타입으로 name 변수가 있고, 여기에 값을 넣었다고 치자.
그럼 print(name);
이렇게 하면 값이 출력이 된다.
그런데 이걸 이제 다른 문자를 쓰고 중간에 출력하고 싶다 하면 아래와 같이 한다.
중간에 $변수명 이렇게 넣어주는 것이다.
void main() {
String name = 'Mei';
print("my name is $name, nice to meet you");
}
이런 방법은 (알고는 있겠지만) 앱을 만들 때,
사용자 별 이름이나, 뭐 나이 성별 기타 등등,, 바뀔 내용 있을 때 쓴다.
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은 Collection이 가지고 있는 데이터들의 데이터 타입을 지정하는 것이다.
아래처럼 <> 안에 넣어서 Generic 타입 지정 가능하다.
// <>안에 List에 들어갈 데이터 타입을 지정
List<int> number = new List();
List<String> name = new List();
이렇게 <dynamic>으로 타입 지정하여 여러 타입이 가능하게 하는 것보다
정확히 지정해주는 것이 오류날 일이 줄어드니까 더 좋다.
Generic 기법의 가장 큰 장점은 코드를 더 간결하게 작성할 수 있다는 것이다.
네모 모양에 네모박스, 동그라미 모양에 동그라미 박스를 밀어 넣는 코드를 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){
}
}
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 책도 하나 구매했는데, 다음주부터는 강의들으며 책도 좀 봐야겠다.
오늘 하루도 짧은 정리지만 포스팅 완료 🥱☄️