![](https://velog.velcdn.com/images/hoha/post/fb9fb29e-1682-46b1-8db4-77a5a24d080a/image.png)
위 책의 내용을 바탕으로 글을 쓴다.
타입 추론
Dart 언어는 타입 추론을 지원한다.
값이 들어올 때 타입을 추론하여 변수를 초기화 한다.
var과 dynamic의 차이는 var은 타입 변경이 불가능하고 dynamic은 타입 변경이 가능하다.
![](https://velog.velcdn.com/images/hoha/post/e43a45e0-2d61-49f5-bdf6-3183f8f0c1bc/image.png)
![](https://velog.velcdn.com/images/hoha/post/43db00fe-ae17-46ec-9b98-a8310b72b3cf/image.png)
위에서 오류가 뜨는 이유는 var타입은 선언하면, 타입 변형이 이뤄지지 않기 때문이다.
![](https://velog.velcdn.com/images/hoha/post/359d879b-1863-4810-a0fc-94451ee846bb/image.png)
위와 같이 dynamic 타입은 타입 변형이 이루어 지므로 오류가 발생하지 않는다.
삼항연산자
조건식 ? 참이면 실행 : 거짓이면 실행
void main(){
int point = 60;
print(point>=60 ? "합격" : "불합격");
}
![](https://velog.velcdn.com/images/hoha/post/17935bf8-3f28-42fb-b9cc-b012453f133a/image.png)
null 대체 연산자
- 변수의 값이 null이면 ?? 뒤의 값이 출력되고, null이 아니면 변수의 값이 출력된다.
void main(){
String? username = null;
print(username);
print(username ?? "홍길동");
}
![](https://velog.velcdn.com/images/hoha/post/0c5d8606-39d0-4fa5-a53a-1a0ed3dac5b6/image.png)
함수
- 함수란 하난의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합
- 반복적인 프로그래밍을 피하고 코드를 재사용할 수 있게 도와준다.
- 함수로 코드를 나누어 작성하면 모듈화가 되고 가독성이 좋아지며 문제 발생시 손쉽게 유지보수가 가능.
함수의 예를 들어보자.
![](https://velog.velcdn.com/images/hoha/post/79d0a4ea-a89f-4b73-945f-41861f197bc7/image.png)
int addOne(int n){
return n+1;
}
- int => return타입
- addOne => 함수이름
- (int n) => 매개 변수
- return n+1 => 반환 값
void main(){
int result = addOne(2);
print("결과 : ${result}");
}
- addOne함수에 매개변수2 를 넣어 2+1이라는 결과 값을 result에 담는다.
- result값을 출력한다.
익명함수와 람다식
- 익명함수와 람다식의 차이점은 람다식에서는 return키워드를 적지 않아도 값이 반환되지만, 익명함수는 값을 반환하려면 return 키워드를 꼭 적어야 한다.
익명함수
(매개변수){
동작 혹은 반환 값
}
![](https://velog.velcdn.com/images/hoha/post/5b580231-3415-4409-b879-adff4a75cc5a/image.png)
![](https://velog.velcdn.com/images/hoha/post/747c6d23-4df1-495d-bfca-09c955951177/image.png)
람다식
함수를 하나의 식으로 표현한다.
(매개변수) => 동작 혹은 반환값
![](https://velog.velcdn.com/images/hoha/post/071d0374-0af3-4eab-831b-85ac98e224ec/image.png)
객체 지향 프로그래밍
클래스(설계도)를 정의하고 main() 함수에서 사용해 보도록 하자.
![](https://velog.velcdn.com/images/hoha/post/74cdd400-1768-4576-8b7d-30dfe3ac4a4e/image.png)
협력하기
![](https://velog.velcdn.com/images/hoha/post/302439fc-4aca-4fdd-8f00-255589db7cef/image.png)
cascade 연산자
- ... 연산자를 사용하면 코드 한 줄로 객체를 변수로 넘겨주면서 객체가 가진 함수를 호출할 수 있는 유용한 표기법이다.
![](https://velog.velcdn.com/images/hoha/post/b5e1f858-4cd1-4d71-b387-d022b03cfa23/image.png)
추상클래스
예제를 통해 알아보도록 하자.
![](https://velog.velcdn.com/images/hoha/post/6b631d8d-b8d3-4cf8-ba58-ab538ea6f706/image.png)
팀장이 신입 개발자에게 물고기 소리 프로그램을 추가해달라고 요청했다. 추가할 때 Animal추상 클래스를 implements 해서 만들어 달라고 부탁도 했다.
![](https://velog.velcdn.com/images/hoha/post/36b6fb17-1336-4fcb-8e5a-adc22fd8aabe/image.png)
위와 같은 코드로 해결이 된다.
- 추상 클래스 Animal을 사용하여 Dog 클래스와 Cat 클래스와 Fish 클래스를 Animal 타입으로 묶을 수 있다. 이것을 다형성이라고 한다.
컬렉션
List
- List는 데이터의 중복이 가능하고 순서가 있는 자료를 담는 컬렉션이다.
- 자료는 순차적으로 index(번호)를 생성하여 쌓이게 된다.
- <>타입을 사용하기도 하는데, 제네릭 타입이라고 한다.
- Dart는 타입 추론을 제공하기 때문에 var로 선언할 수 있다.
타입 지정
List<int> nums = [1,2,3,4];
타입 추론
var nums = [1,2,3,4];
Map
- 키 Key와 값 Value 의 쌍으로 이루어진 컬렉션이다.
- Map은 키(key)로 값을 찾아낸다.
![](https://velog.velcdn.com/images/hoha/post/25d71ce0-3864-40c0-bac0-b133eb9295ca/image.png)
Set
- 집합을 표현하는 컬렉션이다.
- 데이터의 중복이 허용되지 않는다.
- 로또 번호 생성기 등을 만들 때 유용하게 활용되어진다.
Set을 이용한 로또 번호 만들기
![](https://velog.velcdn.com/images/hoha/post/fd216724-4a55-4e04-bef8-ccd755d09cf7/image.png)
위와 같이 Set을 이용하여 로또 번호를 출력할 수 있다.
List형식으로 바꾸기(toList를 이용)
![](https://velog.velcdn.com/images/hoha/post/a49c4c55-84f4-4546-812d-6d6f806745f0/image.png)
toList() 메소드를 이용하여 Set형식의 lotto를 List 형식으로 바꿀 수 있다.
final 과 const
- final과 Consts 는 둘 다상수를 선언하게 하는 키워드.
final 은 프로그램이 실행될 때 초기화 되지만, const는 컴파일 시점에 값이 초기화 된다.
컴파일 시에 초기화되기 때문에 런타임 때 속도가 빠르다.
동일한 클래스를 객체로 여러 번 만들어야 하는 경우에 생성자 인수의 값이 동일하면 같은 객체이기 때문에 메모리에 만들어진 객체를 재사용한다.
동일한 클래스를 객체로 여러 번 만들어야 하는 경우에 생성자 인수의 값이 다르면 새로운 객체를 생성한다.
1. 생성자 인수의 값이 동일하기 때문에 객체를 재사용한다.
![](https://velog.velcdn.com/images/hoha/post/3092863f-baed-4c71-a4bc-03b7957bbf82/image.png)
2. 생성자 인수의 값이 다르기 때문에 새로운 객체를 생성한다.
![](https://velog.velcdn.com/images/hoha/post/0a0e3b50-e1f2-4278-80f9-792d096058e2/image.png)
- hashCode 의 값이 같다고 하는 것은 같은 메모리를 사용한다는 뜻이다.
Null Safety
- Dart 2.12 버전부터 Null Safety가 적용된다.
- ?를 클래스 뒤에 붙이면 Null Safety가 적용되어서 null을 받을 수 있는 타입이 된다.
![](https://velog.velcdn.com/images/hoha/post/41abec1d-1d09-470a-8ad9-125965ea9cfd/image.png)
- 선택적 매개변수는 값을 받을 수도 있고 받지 않을 수도 있는데, String 타입과 int 타입은 null을 허용하지 않는 타입이기 때문이다.
required
- required 키워드를 생성자 파라미터의 변수명 앞에 붙이게 되면, 선택적 파라미터이지만 값을 무조건 받아야 한다.
![](https://velog.velcdn.com/images/hoha/post/36c22a8b-f64c-462d-8a76-2504335c78d6/image.png)
Null Safety 적용하기
자료형? 변수명;
위의 형식을 통해 Null값을 허용하게끔 할 수 있다.
![](https://velog.velcdn.com/images/hoha/post/831d74fe-0402-49ae-898f-7e07d58034ba/image.png)