[Dart] 다트 기본다지기(1)

ho's·2022년 8월 31일
0

위 책의 내용을 바탕으로 글을 쓴다.


타입 추론

Dart 언어는 타입 추론을 지원한다.
값이 들어올 때 타입을 추론하여 변수를 초기화 한다.
var과 dynamic의 차이는 var은 타입 변경이 불가능하고 dynamic은 타입 변경이 가능하다.

위에서 오류가 뜨는 이유는 var타입은 선언하면, 타입 변형이 이뤄지지 않기 때문이다.

위와 같이 dynamic 타입은 타입 변형이 이루어 지므로 오류가 발생하지 않는다.

삼항연산자

조건식 ? 참이면 실행 : 거짓이면 실행
void main(){
	int point = 60;
    print(point>=60 ? "합격" : "불합격");
}

null 대체 연산자

  • 변수의 값이 null이면 ?? 뒤의 값이 출력되고, null이 아니면 변수의 값이 출력된다.
void main(){
	String? username = null;
    
    print(username);
    print(username ?? "홍길동");
}

함수

  • 함수란 하난의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합
  • 반복적인 프로그래밍을 피하고 코드를 재사용할 수 있게 도와준다.
  • 함수로 코드를 나누어 작성하면 모듈화가 되고 가독성이 좋아지며 문제 발생시 손쉽게 유지보수가 가능.

함수의 예를 들어보자.

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 키워드를 꼭 적어야 한다.

익명함수

  • 함수에 이름이 없다.
(매개변수){
	동작 혹은 반환 값
}

람다식

함수를 하나의 식으로 표현한다.

(매개변수) => 동작 혹은 반환값

객체 지향 프로그래밍

클래스(설계도)를 정의하고 main() 함수에서 사용해 보도록 하자.

협력하기

cascade 연산자

  • ... 연산자를 사용하면 코드 한 줄로 객체를 변수로 넘겨주면서 객체가 가진 함수를 호출할 수 있는 유용한 표기법이다.

추상클래스

예제를 통해 알아보도록 하자.

팀장이 신입 개발자에게 물고기 소리 프로그램을 추가해달라고 요청했다. 추가할 때 Animal추상 클래스를 implements 해서 만들어 달라고 부탁도 했다.

위와 같은 코드로 해결이 된다.

  • 추상 클래스 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)로 값을 찾아낸다.

Set

  • 집합을 표현하는 컬렉션이다.
  • 데이터의 중복이 허용되지 않는다.
  • 로또 번호 생성기 등을 만들 때 유용하게 활용되어진다.

Set을 이용한 로또 번호 만들기

위와 같이 Set을 이용하여 로또 번호를 출력할 수 있다.

List형식으로 바꾸기(toList를 이용)

toList() 메소드를 이용하여 Set형식의 lotto를 List 형식으로 바꿀 수 있다.

final 과 const

  • final과 Consts 는 둘 다상수를 선언하게 하는 키워드.
    final 은 프로그램이 실행될 때 초기화 되지만, const는 컴파일 시점에 값이 초기화 된다.

컴파일 시에 초기화되기 때문에 런타임 때 속도가 빠르다.
동일한 클래스를 객체로 여러 번 만들어야 하는 경우에 생성자 인수의 값이 동일하면 같은 객체이기 때문에 메모리에 만들어진 객체를 재사용한다.
동일한 클래스를 객체로 여러 번 만들어야 하는 경우에 생성자 인수의 값이 다르면 새로운 객체를 생성한다.

1. 생성자 인수의 값이 동일하기 때문에 객체를 재사용한다.

2. 생성자 인수의 값이 다르기 때문에 새로운 객체를 생성한다.

  • hashCode 의 값이 같다고 하는 것은 같은 메모리를 사용한다는 뜻이다.

Null Safety

  • Dart 2.12 버전부터 Null Safety가 적용된다.
  • ?를 클래스 뒤에 붙이면 Null Safety가 적용되어서 null을 받을 수 있는 타입이 된다.

  • 선택적 매개변수는 값을 받을 수도 있고 받지 않을 수도 있는데, String 타입과 int 타입은 null을 허용하지 않는 타입이기 때문이다.

required

  • required 키워드를 생성자 파라미터의 변수명 앞에 붙이게 되면, 선택적 파라미터이지만 값을 무조건 받아야 한다.

Null Safety 적용하기

자료형? 변수명;

위의 형식을 통해 Null값을 허용하게끔 할 수 있다.

profile
그래야만 한다

0개의 댓글