dart
언어에서 static
과 get
은 클래스 내에서 사용되는 키워드들입니다. 그러나 이 두 키워드는 완전히 다른 목적과 기능을 가지고 있습니다.
static
static
키워드는 해당 멤버 변수나 메서드가 인스턴스에 속하지 않고 클래스 자체에 속한다는 것을 나타냅니다.
따라서 static
으로 선언된 멤버는 클래스의 인스턴스를 생성하지 않고도 사용할 수 있습니다.
static
멤버는 클래스의 모든 인스턴스에 걸쳐 공유됩니다. 즉, 이는 모든 인스턴스가 동일한 메모리 주소의 static 멤버를 공유한다는 것을 의미합니다. 따라서 하나의 값만 가지게 됩니다.
class MyClass {
static int staticVariable = 0; // static 멤버 변수
int instanceVariable = 0;
testStatic (instanceVariable) {
return staticVariable + instanceVariable; // static 멤버 + 멤버 변수
}
}
void main() {
MyClass obj1 = MyClass();
MyClass obj2 = MyClass();
// 인스턴스 변수는 각 객체마다 독립적입니다.
obj1.instanceVariable = 10;
print(obj1.instanceVariable); // 출력: 10
print(obj2.instanceVariable); // 출력: 0
// static 변수는 모든 객체에 걸쳐 공유됩니다.
MyClass.staticVariable = 5;
print('1. static 변수 수정 ${MyClass.staticVariable}'); // 출력: 5
print('1. 테스트 메서드 ${obj1.testStatic(10)}'); // 테스트 메서드 15
print('1. 테스트 메서드 ${obj2.testStatic(100)}'); // 테스트 메서드 105
MyClass.staticVariable = 10000; // static 변수를 수정
print('2. static 변수 수정 ${MyClass.staticVariable}'); // 출력: 10000
print('2. 테스트 메서드 ${obj1.testStatic(10)}'); // 테스트 메서드 10010
print('2. 테스트 메서드 ${obj2.testStatic(100)}'); // 테스트 메서드 10100
// obj1과 obj2 모두 동일한 staticVariable 값을 참조합니다.
// staticVariable은 MyClass를 통해서만 접근할 수 있습니다.
}
get
get
키워드는 Dart에서 getter 메서드를 정의할 때 사용합니다.
클래스의 프로퍼티 값을 가져오기 위한 메서드로, 직접 프로퍼티에 접근하는 것처럼 사용될 수 있습니다.
set
키워드와 함께 사용되어 값을 설정할 수도 있습니다.
캡슐화: 객체의 내부 상태를 외부로부터 숨기고, 특정 방법으로만 접근을 허용하면서 객체의 내부를 외부의 직접적인 조작으로부터 보호할 수 있습니다.
유지보수: 외부에서 직접 변수에 접근하는 대신 getter를 사용하면, 나중에 내부 구현이 변경되더라도 외부 코드에 영향을 주지 않아 유지보수가 쉽습니다.
class MyClass {
int _privateVariable = 0;
// getter 메서드
int get variable => _privateVariable;
// setter 메서드
set variable(int value) {
_privateVariable = value;
}
}
void main() {
MyClass obj = MyClass();
print('getter 호출 ${obj.variable}'); // getter 호출
obj.variable = 5; // setter 호출
print('다시 getter 호출하여 수정된 값을 출력 ${obj.variable}'); // 다시 getter 호출하여 수정된 값을 출력
}
좋은 정보 얻어갑니다, 감사합니다.