Class
(예, 스마트폰 설계도)에는 어떤 객체에 대한 속성(예, 액정, 카메라 모듈, 홈버튼, 스크린)과 기능(예, 전화 걸기, 사진찍기, 인터넷 검색)에 대한 정의가 들어가있어야한다. 그리고 Class에 의해 정의된 속성과 기능대로 만들어진 사물을 인스턴스
(예, 스마트폰)라고 한다. Class와 인스턴스의 속성과 기능은 같지만, 고유한 숫자를 같고 있어서, 각 인스턴스는 확실하게 구별이 가능하다.
// 클래스명은 대문자
class Person {
// 변수의 Data type을 지정해서 변수 선언
String name;
int age;
String sex;
}
// main 함수
void main() {
// 어떤 타입으로 인스턴스를 생성할 지, 지정한다 => Person 클래스 타입
// 그리고 원하는 인스턴스 이름을 지정한다 => p1
// 코드 해석: Person 클래스로 p1이라고 부르는 새로운 인스턴스를 생성한다.
// p1은 Person 클래스가 가진 모든 속성을 가진다. 다양한 곳에 사용할 수 있다.
Person p1 = new Person();
// Person 클래스의 변수에 접근하려면 인스턴스 뒤에 '.'을 사용한다.
p1.age = 30;
// 콘솔창에 출력할 떄는 print함수를 사용
print(p1.age); // 30
}
class Person {
String name;
int age;
String sex;
}
// Dart 언어는 타입 추론을 할 수 있다
// 타입을 지정해주어야한다
// 타입 추론이 가능한데, 타입을 지정해주는 이유는
// 발생할 수 있는 오류를 방지하기위해서이다
int addNumber(int num1, int num2) {
return num1 + num2;
}
void main() {
Person p1 = new Person();
print(p1.age);
// 함수를 호출하는 방법
addNumber(3, 4);
print(addNumber(3, 4)); // 7
}
class Person {
// 클래스에서 정의한 아래 변수들을 '멤버변수'라고 한다
String name;
int age;
String sex;
// 생성자(constructor)
// 생성자는 인스턴스가 생성될 때, 딱 한번만 호출된다
// argument의 변수명은 똑같이 지정하지않고, 마음대로 지정하면된다. 구분은 ','로 한다.
// 인스턴스 생성 시, 호출 될 때, 아래 예시처럼 세 개의 argument 값을 받아야한다
// #2. name이란 변수에 argument 값을 입력하게 되면
Person(String name, int age, String sex) {
// 생성자의 body
// #1. this를 붙이면 this.name이 Dart에게 '멤버변수'라는 것을 알려준다
// #3. #2에서 말한 값을 '멤버변수'인 this.name에 할당해준다
this.name = name;
this.age = age;
this.sex = sex;
}
}
void main() {
// 같은 클래스를 통해서 생성된 두 개의 인스턴스지만
// p1과 p2는 생성자의 입력값에 따라서 다른 존재가 되었다
Person p1 = new Person('Tom', 30, 'male');
Person p2 = new Person('Jane', 27, 'female');
print(p1.age); // 30
print(p2.age); // 27
}
생성자의 argument가 10개, 100개 ... 로 많다면? named argument
class Person {
String name;
int age;
String sex;
// named argument
// 생성자가 가지고 있는 arguments를 {}로 묶는다
// argument는 이제 optional로 바껴서, 빈 값으로 만들어도 되고,
// 순서도 전혀 상관이 없다
Person({String name, int age, String sex}) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
void main() {
// argument에 직접 값을 입력해줄 수 있다.
Person p1 = new Person(age: 30);
Person p2 = new Person(sex: 'male');
print(p1.age); // 30
print(p2.sex); // male
}