Foggy day
[Dart] 클래스(class)에 대하여 - 1 본문
개발에 있어서 객체지향과 클래스의 개념은 매우 중요합니다. 하지만 처음에 개념을 이해하기는 어렵기 때문에 개발을 해 나가면서 차츰 이해도와 숙련도를 높이는 것을 추천합니다. 이번 포스팅에서는 객체지향에 대한 개념을 상세하게 소개하는 것이 아니기 때문에 Dart에서 class를 사용하는 방법을 익히는 것 위주로 다루겠습니다.
1. 객체지향(OOP, Object Oriendted-Programming)
객체지향프로그래밍의 핵심 개념은 모든 데이터를 객체(Object)로 본다는 것입니다. 무슨 말이냐면 String 타입의 변수나, int 타입의 변수 또한 객체라는 것입니다. 다른 예로 우리는 사람인 것과 동시에 동물입니다. 사람이 더 구체적인 개념이므로 String과 같고, 동물이 포괄적인 개념이므로 객체와 같습니다. 변수 뿐만 아니라 함수나 클래스도 모두 객체입니다.
이러한 객체들을 메모리에 할당하는 것을 인스턴스(instance)화한다라고 합니다. 실제 코드에서는 클래스를 생성하면 생성된 클래스가 인스턴스가 됩니다.
객체지향에는 크게 4가지 특징이 있는데 추상화, 상속, 다형성, 캡슐화입니다. 이러한 특징들을 기반으로 프로그래밍 하는 객체지향프로그래밍은 하나의 컴퓨터 프로그래밍 패러다임입니다.
2. class 사용법
클래스를 만드는 법은 class 키워드와 클래스명 그리고 중괄호를 통해 이루어집니다.
그리고 클래스명과 동일한 함수형태인 Person(); 을 생성자라고 합니다.
아래 예제와 같은 형태가 되면 Person이라는 클래스를 생성할 수 있습니다. Person 클래스를 사용할 때는 생성자와 동일한 형태를 갖추면 됩니다.
class Person {
/// 기본 생성자
/// 생성자를 선언하지 않아도 기본적으로 존재한다.
/// 하지만 만약에 매개변수가 필요하다면 생성자를 직접 선언해줘야 한다.
Person();
}
// 클래스 생성
Person person = Person();
개발을 하다보면 클래스에는 다양한 변수와 함수들이 존재하는 것을 볼 수 있습니다. 그리고 클래스에 데이터를 넘겨주는 것도 필요하고, 클래스에 있는 변수나 함수들을 사용하는 것도 필요합니다. 때문에 클래스의 다양한 사용법에 대해 더 알아보겠습니다.
- 클래스를 생성하면서 클래스 내부 함수 실행
class Person {
/// 클래스가 생성되면서 클래스 내부에 있는 함수를 실행시키고 싶을 때
/// 생성자에서 중괄호를 열어 함수를 호출하면 됩니다.
/// 단순 함수 호출 뿐만 아니라 다른 작업도 가능합니다.
Person() {
talk();
}
void talk() {
print("Person 클래스 talk 함수 호출");
}
}
... 생략 ...
Person person = Person();
콘솔
Person 클래스 talk 함수 호출
- 클래스와 매개변수
클래스를 생성할 때 특정 값들은 전달하고, 이 값들을 클래스 내부의 변수에 할당하고 싶은 경우가 있습니다.
이때 매개변수를 입력하는 방식은 함수처럼 여러가지가 있습니다.
class Person {
/// 클래스에서 선언한 변수는 지역변수 혹은 프로퍼티라고 합니다.
/// 지역변수를 만들 때 초기 값을 세팅해주지 않고,
/// 생성자에서도 입력받지 않는다면 에러가 발생합니다.
int age;
String name;
/// 생성자에서 매개변수를 받을 수 습니다.
/// 생정자를 호출 시 입력받은 age와 name이 자동으로 지역변수에 할당됩니다.
Person(this.age, this.name);
}
/// 클래스의 생성자를 호출할 때는 함수와 같은 방식으로 사용하면 됩니다.
Person person = Person(30, "홍길동");
- 생성자에서 required 키워드를 사용하는 경우
class Person {
/// 클래스에서 선언한 변수는 지역변수 혹은 프로퍼티라고 합니다.
/// 지역변수를 만들 때 초기 값을 세팅해주지 않고,
/// 생성자에서도 입력받지 않는다면 에러가 발생합니다.
int age;
String name;
/// 매개변수를 반드시 입력하도록 한다.
Person({required this.age, required this.name});
// Person({this.age = 30, this.name ="홍길동"});
}
/// 어떤 변수에 입력하는지 name값도 같이 입력해야 합니다.
Person person = Person(age : 30, name : "홍길동");
- 변수 지연생성
class Person {
/// 지역변수를 클래스 생성 시 매개변수로 초기화하지 않고, 나중에 초기화하고 싶은 경우
/// 앞에 late 키워드를 붙이면 됩니다.
/// 이 때 주의할 것은 값을 할당해서 초기화 하지 않고 변수를 사용한다면 에러가 발생합니다.
late int age;
late String name;
Person() {
age = 30;
name = "홍길동";
}
}
- 클래스 생성 후 지역변수 호출
class Person {
int age;
String name;
Person(this.age, this.name);
void talk(){
print("안녕하세요. talk 함수 호출")
}
}
Person person = Person(30, "홍길동");
// 클래스에 있는 변수나 함수를 불러오기 위해서는
// 생성된 클래스의 뒤에 .을 사용해서 호출할 수 있습니다.
int personAge = person.age; // 30
String personName = person.name; // 홍길동
person.talk(); // Person 클래스에 있는 talk 함수 호출
콘솔
안녕하세요. talk 함수 호출
'Flutter > Dart 문법' 카테고리의 다른 글
[Dart] Future 사용법(동기/비동기 작업 클래스) (2) | 2023.04.28 |
---|---|
[Dart] 클래스(class)에 대하여 - 2 (0) | 2023.03.03 |
[Dart] 알고 있으면 좋은 문법들 (0) | 2023.03.02 |
[Dart] 함수 (0) | 2023.03.02 |
[Dart] 반복문(for문) (0) | 2023.03.02 |