Dart 문법 참고

철웅·2023년 3월 21일
0
post-thumbnail

Data Types

dart에서는 var를 이용하는 법과 데이터 타입을 명시하는 방법으로 데이터 타입을 지정할 수 있다.

  • 관습적으로 함수나 메소드 내부에 지역 변수를 선언할 때에는 var를 사용한다.
  • class에서 변수나 property를 선언할 때에는 타입을 명시하여 지정한다.

📌 var, final, const

var -> 수정가능, dynamic 타입
final, -> 수정불가, 데이터 타입 명시 가능, JS의 const와 같다.

var a = '안녕';
final String b = '안녕';
// b = '안녕안녕' -> 에러 (수정불가)

const -> 수정불가, compile-time constant를 만들어준다.

// fetchAPI() : API를 가져오는 함수라 가정

const API = fetchAPI(); // 컴파일러는 API 변수의 값을 모름 (받아와야 하니까)
const API = '내용';	// 컴파일 할 때 알고있는 값
  • 윗줄이 잘못된 경우 아래쪽이 맞는 경우이다.
  • 배포하기 전에 값을 알고있다면 const!

📌 late

late는 final 이나 var 앞에 붙이는 수식어로, 초기 데이터 없이 변수를 선언할 수 있게 해준다.

late final String name;	// 변수 값 할당 안 함
  • flutter로 data fetching시 자주 사용된다.

Class

🍭 Constructor

class Player{
	final String name;
    int xp;
    
    Player(this.name, this.xp);	// 생성자
}

...


var player = Player("이름", 1500);	// 인스턴스 생성
  • 생성자는 클래스 이름과 같은 이름을 가지는 함수!
  • 클래스가 커질 경우 활용하기 좋지 않음
    var player = Player('이름', 1500 .......); 이렇게 되니까

🍭 Named Constructor Parameter

class Player{
	final String name;
    int xp;
    
    Player({this.name, this.xp});	// 생성자에 중괄호 추가!
}

...

var player = Player(
	name = "이름",
    xp = 1500,
);	// 인스턴스 생성
  • 앞에말한 그냥 생성자의 문제점을 해결
  • key와 value쌍으로 작성해서 뭐가뭔지 알기쉽다

🍭 Named Constructors

class Player{
	final String name;
    int xp age;
    String team;
    
    Player({
    required this.name,	
    required this.xp,
    required this.team,
    required this.age			// required 추가 (필수로 넣어야한다는 뜻)
 });	
 
 Player.createRedPlayer({	// named constructors, 이름은 맘대로 지정
	required String name,
    required int age,
  }) :  this.age = age,
  		this.name = name,
        this.team = 'red',
        this.xp = 0;

}

...

var player = Player.createRedPlayer( 
	name = "이름",
    age = 21,		// xp는 고정값이라 age를 씀
);	// 인스턴스 생성
  • Player 클래스의 property를 초기화하는 역할
  • API에서 데이터를 받아올 때 많이 사용한다.
  • 중간에 콜론: 사용한거 엄청 중요하다

🍭 활용 (fetch Data)

var apiData = [
	{
    	"name" : "aaa",
        "team" : "red",
        "xp" : 1500,
	},
    {
    	"name" : "bbb",
        "team" : "red",
        "xp" : 1500,
	},
    {
    	"name" : "ccc",
        "team" : "red",
        "xp" : 1500,
	}
]
  • 이러한 JSON 형식 데이터를 받아온다고 가정하자
class Player {
	final String name;
    int xp;
    String team;
    
    Player.fromJson(Map<String, dynamic> playerJson) 	// named constructor
    :	name = playerJson['name'],
        xp = playerJson['xp'],
        team = playerJson['team'];
}

...

// 데이터 담기
apiData.forEach((element) {
	var player = Player.fromJson(element);
    print(Player)
})
  • Player.fromJson(Map<String, dynamic> playerJson)
    Map으로 받고 그걸 playerJson이라고 한다. fromJson은 그냥 이름 지어서 쓴거임
  • 중간에 콜론 있는거 기억하기!

0개의 댓글