클래스 선언과 생성
다트에서 클래스는 다른 객체지향 언어와 마찬가지로 class라는 예약어로 선언합니다. 그리고 클래스에는 변수와 함수를 멤버로 선언할 수 있습니다.
// 클래스 선언
class User {
String name = 'kkang';
int age = 10;
void sayHello() {
print('Hello $name, age: $age');
}
}
이렇게 선언한 클래스를 이용하려면 객체를 생성해야 합니다. 그리고 생성한 객체 이름으로 클래스에 선언한 변수와 함수를 이용합니다. 객체를 생성할 때는 new 연산자를 이용해도 되고 생략해도 됩니다. 즉, new 연산자를 이용하든 이용하지 않든 클래스의 생성자를 호출하면 객체를 생성할수 있습니다.
// 객체 생성
User user1 = new User();
객체 멤버와 클래스 멤버
클래스에 선언한 변수나 함수를 멤버라고 합니다. 그런데 이 멤버들은 다시 객체 멤버와 클래스 멤버(혹은 정적 멤버)로 구분됩니다. 먼저 객체 멤버는 생성된 객체를 이용해서 접근합니다.
아래 코드에서는 User 클래스의 생성자를 호출해 user1이라는 객체를 선언합니다. 그리고 user1로 User 클래스에 선언된 name, age 변수와 sayHello() 함수를 이용합니다. 이처럼 객체 멤버는 객체를 생성하고 그 이름으로 접근합니다.
// 객체 멤버 이용
User user1 = User();
user1.sayHello();
user1.name = 'kim';
user1.age = 20;
클래스 멤버는 static 예약어로 선언한 멤버입니다. 그래서 흔히 정적 멤버라고도 부릅니다. 다음 코드에서는 MyClass라는 이름이 클래스에 멤버를 선언했습니다. data1과 myFun1()은 객체 멤버로 선언하고, data2와 myFun2()는 앞에 static을 붙여 클래스 멤버로 선언했습니다.
// 클래스 멤버 선언
class MyClass {
String data1 = 'hello';
static String data2 = 'hello';
myFun1() {
print('myFun1 call....');
}
static myFun() {
print('myFun2 call....');
}
}
객체 멤버는 앞에서 살펴본 대로 객체를 생성하고 그 이름으로 접근합니다. 만약 다음 코드에서 첫 번째 줄처럼 객체를 생성하지 않고 객체 멤버를 클래스 이름으로 이용하면 오류가 발생합니다.
// 객체 멤버 이용
MyClass.data1 = 'world'; // 오류
MyClass obj = MyClass();
obj.data1 = 'world'; // 성공
그런데 static으로 선언한 클래스 멤버는 클래스 이름으로 접근할 수 있습니다. 다음 코드에서 data2 변수는 MyClass에 static으로 선언한 변수이므로 클래스 이름으로 접근할 수 있습니다. 그런데 클래스 멤버는 객체로 접근할 수 없습니다.
// 클래스 멤버 이용
MyClass.data2 = 'world'; // 성공
MyClass obj = MyClass();
obj.data2 = 'world'; // 오류
'Flutter' 카테고리의 다른 글
명명된 생성자 (0) | 2024.11.14 |
---|---|
생성자와 멤버 초기화 (0) | 2024.11.13 |
실행 흐름 제어하기 (0) | 2024.11.13 |
기타 연산자 알아보기 (0) | 2024.11.12 |
게터와 세터 함수 (0) | 2024.11.12 |