Today I Learned (250707) 4-1.
클래스 구성
- 클래스는 속성과 메서드로 구성되어 있음 + 생성자
- 속성과 메서드는 클래스 안에 있는 요소로 클래스의 멤버라고 부르기도 함
메서드(Method)
- 객체의 동작을 정의하는 함수
- 속성을 변경하거나 객체를 가지고 특정 작업을 수행함
Q. 함수와 메서드의 차이
- 함수와 메서드는 모두 동작을 정의한다는 점에서는 같지만
메서드는 클래스에 의존하고, 함수는 클래스에 의존하지 않는다는 차이가 있음
void function() {
print('저는 함수입니다 !');
}
class Class {
void method() {
print('저는 메서드입니다 !');
}
}
void main() {
function(); // 저는 함수입니다 !
Class object = Class();
object.method(); // 저는 메서드입니다 !
}
/* method는 클래스 안에 있어서 클래스 의존적이지만,
function()은 클래스 안에 있지 않아 클래스와 독립된 친구임
메서드의 종류
1. 인스턴스 메서드(Instance Method)
- 객체에 속해 있는 메서드
class Person {
String name = '화춘기';
int age = 25;
void introduce() {
print('안녕 ? 나는 $age살 $name !');
}
}
//introduce()가 인스턴스 메서드
- 인스턴스 메서드는 this를 통해 접근할 수 있음
class Person {
String name = '화춘기';
int age = 25;
void printName() {
print(name);
}
void printNameAndAge() {
this.printName();
print(age);
}
}
// this 없이 printName();도 가능
- 인스턴스 메서드는 클래스의 모든 곳에서 접근할 수 있음
class Person {
String name = '화춘기';
int age = 25;
void printName() {
print(name);
}
void printNameAgain() {
printName();
}
}
2. 정적 메서드(Static Method) - 클래스 메서드라고도 부름
- 객체에 종속되지 않고 클래스 자체에 속하는 메서드
class Circle {
static double pi = 3.14159;
static void printPi() {
print('원주율은 $pi !');
}
}
//printPi() 맨 앞에 붙은 static < static이 붙은 것은 정적 클래스
- 정적 메서드는 클래스 이름을 통해 호출함 - 그래서 객체를 생성하지 않고 메서드를 호출할 수 있음
class Circle {
static double pi = 3.14159;
double radius = 0;
static void printPi() {
print(pi);
}
void printRadius() {
print(radius);
}
}
void main() {
Circle.printPi(); // 3.14159
Circle.printRadius(); // 오류 발생
}
/* printRadius() 는 인스턴스 메서드로 클래스 이름으로 접근할 수 없지만,
printPi() 는 정적 메서드이기 때문에 클래스 이름으로 접근할 수 있음
정적 메서드는 클래스 꺼
- 정적 메서드는 객체를 통해 호출할 수 없음
class Circle {
static double pi = 3.14159;
double radius = 0;
static void printPi() {
print(pi);
}
void printRadius() {
print(radius);
}
}
void main() {
Circle circle = Circle();
circle.radius = 5;
circle.printRadius(); // 5
circle.printPi(); // 오류 발생
}
/* printPi()는 정적 메서드여서 객체로 접근할 수 없지만,
printRadius()는 인스턴스 메서드여서 객체로 접근 가능
정적 메서드는 객체에 종속되지 않아 객체로 접근할수 없음
- 정적 메서드는 this를 통해 호출할 수 없음
class Circle {
static double pi = 3.14159;
double radius = 0;
static void printPi() {
print(pi);
}
void printPiAgain() {
this.printPi(); // 오류 발생
}
}
/* this는 객체를 가리키는 키워드,
정적 메서드는 객체에 종속되지 않아 this 못씀
- 정적 메서드는 코드 블록에서 인스턴스 변수를 사용할 수 없음
class Circle {
double pi = 3.14159;
double radius = 0;
static void printPi() {
print(pi); // 오류 발생
}
}
Q. 인스턴스 메서드의 코드 블록에서 정적 변수는 사용할 수 있음
class Circle {
static double pi = 3.14159;
double radius = 0;
void printArea() {
print(pi * radius * radius);
}
}
// 정적 변수인 pi 를 인스턴스 메서드에 사용
- 정적 메서드는 객체마다 개별적으로 동작하지 않고, 모두 동일하게 동작함
하나의 클래스로 여러 객체를 생성할 수 있기 때문에
공통된 속성과 동작을 갖는 코드를 여러 번 작성하지 않아도 돼서 재사용성 높은 코드를 만들 수 있음
'춘기IT > 춘기개발' 카테고리의 다른 글
| 객체 지향 프로그래밍과 Dart (4) - 객체 지향과 상속 (3) | 2025.07.08 |
|---|---|
| 객체 지향 프로그래밍과 Dart (3) - 생성자 / 제네릭 (2) | 2025.07.07 |
| 객체 지향 프로그래밍과 Dart (1) - 클래스와 속성 (0) | 2025.07.07 |
| 함수형 프로그래밍과 Dart (4) - 함수형 프로그래밍 (매서드 체이닝 방식) (0) | 2025.07.07 |
| 함수형 프로그래밍과 Dart (3) - 함수형 프로그래밍 - 고차 함수 (0) | 2025.07.04 |