다트에서 클래스(Class)를 정의하는 방법은?
_____A: 다트에서 클래스는 `class` 키워드를 사용하여 정의합니다. 기본 구조는 다음과 같습니다.
```dart
class 클래스명 {
// 필드(변수) 선언
타입 필드명;
// 생성자
클래스명(매개변수) {
// 초기화 코드
}
// 메서드(함수)
반환타입 메서드명(매개변수) {
// 실행 코드
}
}
```
---
Q: 다트 클래스에서 생성자를 어떻게 작성하나요?
A: 생성자는 클래스명과 동일한 이름이며, 보통 다음과 같이 정의합니다.
```dart
class Person {
String name;
int age;
// 기본 생성자
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
```
축약형으로는 다음과 같이 쓸 수 있습니다.
```dart
Person(this.name, this.age);
```
---
Q: 다트에서 필드를 선언할 때 초기값이나 nullable 표시를 어떻게 하나요?
A: 필드 선언 시 초기값을 줄 수 있고, null 가능 타입은 타입 뒤에 `?`를 붙입니다.
```dart
class Car {
String model = 'Unknown'; // 초기값 지정
int? year; // null 가능 타입
}
```
---
Q: 메서드는 어떻게 선언하나요?
A: 클래스 안에 함수 형태로 선언합니다.
```dart
class Calculator {
int add(int a, int b) {
return a + b;
}
}
```
---
Q: 다트 클래스는 기본적으로 public인가요? private 필드나 메서드 선언 방법은?
A: 네, 기본 멤버는 public입니다. 식별자 이름 앞에 언더스코어(_)를 붙이면 private가 됩니다.
```dart
class BankAccount {
void deposit(int amount) {
_balance += amount;
}
int get balance => _balance; // getter
}
```
---
Q: 축약형 생성자 작성 예시가 궁금해요.
A:
```dart
class Point {
double x, y;
// 축약형 생성자
Point(this.x, this.y);
}
```
---
Q: 생성자 내부에 초기화 리스트는 어떻게 쓰나요?
A: 생성자 콜론 뒤에 초기화 리스트를 넣습니다.
```dart
class Rectangle {
double width, height;
double area;
Rectangle(this.width, this.height) : area = width * height;
}
```
---
Q: 다트에서 클래스 상속은 어떻게 하나요?
A: `extends` 키워드를 사용합니다.
```dart
class Animal {
void speak() => print('Animal sound');
}
class Dog extends Animal {
@override
void speak() => print('Bark');
}
```
---
Q: 클래스 내 getter와 setter는 어떻게 만드나요?
A:
```dart
class Circle {
double radius;
Circle(this.radius);
// getter
double get area => 3.14 * radius * radius;
// setter
set changeRadius(double r) {
radius = r;
}
}
```
---
요약하자면, 다트에서 클래스는 `class` 키워드로 선언하며, 필드와 생성자, 메서드를 포함할 수 있고, private 멤버는 이름 앞에 `_`를 붙이면 됩니다. 생성자는 간단하게 축약형으로도 작성 가능하며, 상속과 getter/setter도 지원합니다.
클래스는 객체를 생성하기 위한 청사진(blueprint)으로, 속성과 메서드를 포함할 수 있습니다.
아래에서 다트에서 클래스를 정의하는 방법에 대해 자세히 설명하겠습니다.
1. 클래스 정의 기본 구조 다트에서 클래스를 정의하려면 `class` 키워드를 사용합니다.
클래스 이름은 대문자로 시작하는 것이 일반적인 관례입니다.
기본적인 클래스 정의는 다음과 같습니다: ```dart class ClassName { // 속성 (필드) Type propertyName; // 생성자 ClassName(this.propertyName); // 메서드 void methodName() { // 메서드의 구현 } } ```
2. 속성 (Fields) 클래스의 속성은 클래스 내부에 정의된 변수입니다.
속성은 클래스의 상태를 나타내며, 다양한 데이터 타입을 가질 수 있습니다.
예를 들어: ```dart class Person { String name; int age; Person(this.name, this.age); } ``` 위의 예제에서 `Person` 클래스는 `name`과 `age`라는 두 개의 속성을 가지고 있습니다.
3. 생성자 (Constructors) 생성자는 클래스의 인스턴스를 생성할 때 호출되는 특별한 메서드입니다.
다트에서는 기본 생성자 외에도 명명된 생성자(named constructor)와 팩토리 생성자(factory constructor)를 정의할 수 있습니다.
기본 생성자 ```dart class Person { String name; int age; Person(this.name, this.age); // 기본 생성자 } ``` 명명된 생성자 ```dart class Person { String name; int age; Person(this.name, this.age); // 기본 생성자 Person.withName(String name) : this(name, 0); // 명명된 생성자 } ``` 팩토리 생성자 팩토리 생성자는 인스턴스를 반환하는 메서드로, 특정 조건에 따라 기존 인스턴스를 반환할 수 있습니다.
```dart class Singleton { static final Singleton _instance = Singleton._internal(); factory Singleton() { return _instance; } Singleton._internal(); // 비공식 생성자 } ```
4. 메서드 (Methods) 클래스 내에서 정의된 함수는 메서드라고 하며, 클래스의 속성을 조작하거나 특정 작업을 수행하는 데 사용됩니다.
```dart class Person { String name; int age; Person(this.name, this.age); void introduce() { print('안녕하세요, 제 이름은 $name이고, 나이는 $age세입니다.
'); } } ```
5. 상속 (Inheritance) 다트는 클래스 상속을 지원하여 기존 클래스를 기반으로 새로운 클래스를 만들 수 있습니다.
상속을 통해 코드의 재사용성을 높이고, 공통된 기능을 공유할 수 있습니다.
```dart class Employee extends Person { String position; Employee(String name, int age, this.position) : super(name, age); } ```
6. 다형성 (Polymorphism) 다트에서는 메서드 오버라이딩을 통해 다형성을 구현할 수 있습니다.
부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용할 수 있습니다.
```dart class Person { void introduce() { print('저는 사람입니다.
'); } } class Employee extends Person { @override void introduce() { print('저는 직원입니다.
'); } } ```
7. 접근 제어자 (Access Modifiers) 다트에서는 클래스의 속성과 메서드에 대한 접근 제어를 위해 `public`과 `private`를 사용할 수 있습니다.
기본적으로 모든 클래스 멤버는 public이며, private 멤버는 이름 앞에 언더스코어(_)를 붙여 정의합니다.
```dart class Person { String name; // public int _age; // private Person(this.name, this._age); } ```
8. 정리 다트에서 클래스를 정의하는 것은 객체 지향 프로그래밍의 핵심 개념을 활용하는 것입니다.
클래스는 속성, 메서드, 생성자, 상속 및 다형성을 통해 복잡한 데이터 구조와 행동을 모델링할 수 있습니다.
이러한 기능을 통해 다트는 강력하고 유연한 프로그래밍 환경을 제공합니다.
작성자:
정재훈 [비회원]
| 작성일자: 1년 전
2024-09-19 01:52:34
조회수: 147 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 147 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.