클래스란?
- Dart에서 객체를 정의하는 틀 또는 설계도
- 구성
- 필드(field)
- 객체의 상태
- 클래스에 포함된 변수
- 메소드(method)
- 객체의 행동
- 어떠한 특정 작업을 수행하기 위한 명령문의 집합
- 필드(field)
인스턴스란?
- 선언된 해당 클래스 타입의 객체
- 메모리에 할당된 객체
- 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있다.
- 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있다.
- 해당 클래스의 모든 메소드(method)는 해당 클래스에서 생성된 모든 인스턴스가 공유하게 된다.
클래스의 인스턴스화란?
- 클래스로부터 객체를 선언하는 과정
- Java에서 클래스를 사용하기 위해서는 해당 클래스 타입의 객체를 선언해야 한다.
클래스 정의 방법
class 클래스이름 {
필드1의타입 필드1의이름;
필드2의타입 필드2의이름;
...
메소드1의 원형
메소드2의 원형
...
};
인스턴스의 생성 방법
/원형
클래스명 변수명 = new 클래스명();
//예시
Car myCar = new Car();
생성자란?
- 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 메소드
- Dart에서 생성자의 이름은 해당 클래스의 이름과 같아야 한다.
- 특징
- 생성자는 반환값이 없지만 반환 타입을 void형으로 선언하지 않는다.
- 생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다.
- 객체를 초기화하는 방법이 여러 개 존재할 경우에는 각 경우에 대한 생성자 메소드를 만들어야 한다.
//매개변수가 없는 생성자
클래스명 {
클래스명() {
//초기화 내용
}
}
//매개변수가 있는 생성자
클래스명 {
자료형 변수명1;
자료형 변수명2;
자료형 변수명3;
...
클래스명({
required this.변수명1,
required this.변수명2,
required this.변수명3,
...
});
}
//초기화 목록이 있는 생성자
//초기화 목록은 생성자 바디가 실행되기 전에 인스턴스 변수를 설정한다.
//예시
Square.fromJson(Map<String, double> json)
: width = json['width']!,
height = json['height']! {
print('In Square.fromJson(): ($width, $height)');
}
//팩토리 생성자
/*
- 해당 클래스의 인스턴스를 매번 생성하지 않아도 된다.
- 보통 자식 클래스의 인스턴스를 리턴 받는다.
*/
//예시
class Car {
String name = "";
factory Car.fromJson(Map<dynamic, dynamic> json) {
try {
return CommonCodeDO(
name: json['name'] ?? "",
);
} catch (e) {
print(e.toString());
return Car.empty();
}
}
}
class Car {
String name = "";
Car(){
this.name = "미출시";
print(name);
}
}
### this 참조 변수
- 인스턴스가 바로 자기 자신을 참조하는 데 사용하는 변수
- 해당 인스턴스의 주소를 가리킨다.
Car car = new Car(); //출력 : 미출시