패턴
·
다트🎯
패턴(Patterns)은 Dart 3.0부터 쓸 수 있는 문법 범주야. 쉽게 말해, 값의 형태를 서술해서 그 값이 기대한 모양인지 매칭해 보고, 맞으면 그 값을 분해(디스트럭처링) 해서 구성 요소를 꺼내오는 방식이야. 어디서 쓸 수 있는지, 뭐가 좋은지 감만 잡자.패턴이 하는 일패턴은 상황과 생김새에 따라 두 가지를 해:매칭: 값이 특정 모양인지, 특정 상수와 같은지, 특정 타입인지 등을 검사.디스트럭처링: 매칭에 성공하면 그 값을 선언적으로 쪼개서 필요한 조각들을 변수로 바로 받기.매칭은 패턴 종류에 따라 달라. 예를 들어 상수 패턴은 값이 그 상수와 같으면 매칭돼:switch (number) { // Constant pattern matches if 1 == number. case 1: pr..
타입 - 타입 시스템
·
다트🎯
Type systemDart는 타입 안정성(type safety) 을 보장하는 언어야.정적 타입 검사(컴파일 타임) + 런타임 검사(실행 시점)를 같이 써서, 변수에 들어가는 값이 항상 선언된 타입과 맞도록 관리하지. 이걸 흔히 **sound typing(건전한 타입 시스템)**이라고 불러.타입은 항상 있어야 하지만, 굳이 내가 일일이 다 적지 않아도 돼. 타입 추론(type inference) 이 자동으로 해주거든.Soundness란?Soundness(건전성) = 프로그램이 잘못된 상태에 빠지지 않도록 보장하는 것.예를 들어, 어떤 표현식의 정적 타입이 String이라면, 실행 시에도 반드시 String만 나와.컴파일 타임에서 잡히는 오류 → int에 String을 넣을 때런타임에서 잡히는 오류 → a..
타입 - 타입 별칭
·
다트🎯
Typedefs (타입 별칭)Dart에서는 타입 별칭(type alias) 을 typedef 키워드로 선언해.길거나 복잡한 타입을 짧고 읽기 쉽게 부르는 이름을 붙일 수 있는 거지.기본 예시typedef IntList = List;IntList il = [1, 2, 3];여기서 IntList는 사실상 List랑 똑같아. 그냥 별명(alias)일 뿐이야.제네릭 타입 별칭타입 별칭도 타입 매개변수를 가질 수 있어.typedef ListMapper = Map>;Map> m1 = {}; // 장황한 표현ListMapper m2 = {}; // 훨씬 짧고 명확버전 참고Dart 2.13 이전 → typedef는 함수 타입만 만들 수 있었어.Dart 2.13 이후 → 지금처럼 모든 타입에 별..
타입 - 제너릭
·
다트🎯
GenericsList의 API 문서를 보면 실제 타입은 List처럼 표기가 붙어 있어. 이건 제네릭(매개변수화) 타입이라는 뜻이고, E, T, S, K, V처럼 보통 한 글자 이름을 써.Why use generics?제네릭은 타입 안전성 때문에 필요하지만, 그 이상 이점이 많아.정확히 타입을 지정하면 생성되는 코드 품질이 좋아지고,중복 코드를 줄일 수 있어.예를 들어 문자열만 담고 싶은 리스트는 List으로 선언하면, 사람도 도구도 실수(예: 숫자 넣기)를 바로 잡아줘.✗ static analysis: failurevar names = [];names.addAll(['Seth', 'Kathy', 'Lars']);names.add(42); // Error또, 공통 인터페이스를 다양한 타입에 한 번만 구..
타입 - 컬렉션
·
다트🎯
CollectionsDart는 리스트, 셋, 맵 컬렉션을 기본 지원해. 컬렉션에 담을 타입 설정은 제네릭을 참고하면 돼.Lists배열(순서가 있는 객체 모음). Dart에선 배열이 List 객체라서 그냥 리스트라고 불러.Dart 리스트 리터럴은 대괄호 [] 안에 쉼표로 요소를 나열해. 각 요소는 보통 표현식이야.var list = [1, 2, 3];NoteDart가 list를 List로 추론해. 여기에 정수가 아닌 걸 넣으면 분석기나 런타임이 에러를 낼 수 있어.마지막 요소 뒤에 콤마를 붙여도 돼(트레일링 콤마). 동작엔 영향 없고, 복붙 실수 방지에 좋아.var list = ['Car', 'Boat', 'Plane'];리스트는 0부터 인덱싱하고, 길이는 .length, 요소 접근은 []를 써.var l..
타입 - 레코드
·
다트🎯
Records버전 주의: Records는 Dart 3.0 이상부터 쓸 수 있어.Records는 익명, 불변, 집합 타입이야. 여러 객체를 하나로 묶는다는 점에서는 컬렉션이랑 비슷한데, 크기가 고정돼 있고, 서로 다른 타입을 섞을 수 있고, 타입 정보도 명확하게 유지돼.Record는 진짜 값이라서 변수에 담을 수도 있고, 중첩할 수도 있고, 함수의 인자·반환값으로 주고받을 수도 있고, 리스트나 맵, 셋 같은 컬렉션에 넣을 수도 있어.Record syntax레코드 표현식은 괄호 안에 쉼표로 구분한 값들을 넣는 거야. 값은 위치 기반(positional)일 수도 있고, 이름을 붙일 수도 있어.var record = ('first', a: 2, b: true, 'last');레코드 타입 표기법도 비슷해. 괄호 ..
타입 - 내장 타입
·
다트🎯
Built-in types (내장 타입)Dart에는 특별 취급하는 내장 타입들이 있어:Numbers: int, doubleStrings: StringBooleans: boolRecords: (value1, value2)Functions: FunctionLists: List (배열처럼 씀)Sets: SetMaps: MapRunes: Runes (지금은 characters 패키지로 대체하는 경우가 많아)Symbols: Symbolnull: Null이 타입들은 리터럴로도 만들 수 있어. 예를 들어 'this is a string'은 문자열 리터럴이고, true는 불리언 리터럴이지.모든 변수가 결국 객체를 참조하기 때문에, 보통은 생성자로 초기화할 수도 있어. 예를 들어 Map() 생성자를 쓰면 맵을 만들 수 ..
다트 - 주석
·
다트🎯
Comments (주석)Dart에서는 한 줄 주석, 여러 줄 주석, 문서화 주석 세 가지를 쓸 수 있어. 각각 용도랑 쓰임이 조금씩 달라.Single-line comments (한 줄 주석)// 로 시작하면 그 줄의 끝까지 전부 주석이야. 컴파일러가 완전히 무시해.void main() { // TODO: refactor into an AbstractLlamaGreetingFactory? print('Welcome to my Llama farm!');}여기서 // TODO:는 그냥 메모야. “나중에 리팩터링하자” 같은 할 일 표시로 자주 써.Multi-line comments (여러 줄 주석)/* 로 시작해서 */로 끝나는 블록 전체가 주석이야. 사이에 있는 건 전부 무시돼. Dart에서는 중첩도 가능..
다트 - 연산자
·
다트🎯
Operators (연산자)Dart는 여러 연산자를 지원해. 우선순위랑 결합 방향(associativity)은 아래 표처럼 정리돼 있어. 위에 있을수록 우선순위가 높고, 같은 줄에 있는 것들은 같은 급이지. 사실 이 표는 진짜 문법을 단순화한 버전이고, 정확한 건 Dart 언어 명세서 문법을 봐야 해.연산자는 쓰면 결국 표현식을 만들게 돼. 예를 들어 이런 게 다 연산자 표현식이야:a++a + ba = ba == bc ? a : ba is TOperator precedence example (우선순위 예시)연산자 우선순위는 위에서 아래로 내려오면서 낮아져. 예를 들어 %는 ==보다 먼저 실행되고, ==는 &&보다 먼저 실행돼. 그래서 이런 두 코드는 사실 똑같이 동작해:// 가독성을 위해 괄호를 쓰면 더..
다트 - 변수
·
다트🎯
Variables (변수)변수를 만들고 값을 넣는 가장 간단한 예는 이거야:var name = 'Bob';여기서 name이라는 변수는 사실 "Bob"이라는 문자열 객체를 참조하고 있는 거야. 즉, 변수 자체에 문자열이 들어가는 게 아니라 문자열을 가리키는 레퍼런스가 저장되는 거지.타입은 Dart가 알아서 추론해서 String으로 잡아주는데, 직접 타입을 지정할 수도 있어. 예를 들어 한 가지 타입으로만 제한하지 않으려면 Object나 dynamic을 쓰면 돼.Object name = 'Bob';물론 타입 추론 결과를 직접 적을 수도 있지:String name = 'Bob';참고로 Dart 스타일 가이드에서는 로컬 변수엔 그냥 타입 말고 var 쓰는 걸 권장해.Null safety (널 세이프티)Dart는..