

static 글 참고:
https://codejunh-develop.tistory.com/73
Dart 프로그래밍 언어에서 정적 메서드와 정적 속성은 객체 지향 프로그래밍의 중요한 개념이다.
이들은 클래스 레벨에서 정의되며, 클래스의 인스턴스를 생성하지 않고도 직접 접근할 수 있다.
정적 메서드 (Static Methods)
정적 메서드는 클래스의 인스턴스가 아닌 클래스 자체에 속한 메서드이다. 이들은 static 키워드를 사용하여 선언된다.
특징:
- 클래스의 인스턴스를 생성하지 않고 호출할 수 있다.
- 클래스 이름을 통해 직접 접근한다.
- 인스턴스 변수에 접근할 수 없다.
예제:
이 예제에서 add 메서드는 정적 메서드이므로 MathOperations 클래스의 인스턴스를 생성하지 않고도 직접 호출할 수 있다.
정적 속성 (Static Properties)
정적 속성은 클래스의 인스턴스가 아닌 클래스 자체에 속하는 변수이다.
정적 속성은 클래스의 모든 인스턴스가 공유하며, 클래스 이름을 통해 직접 접근할 수 있다.
이들 역시 static 키워드를 사용하여 선언된다.
특징:
- 클래스의 모든 인스턴스에서 동일한 값을 공유한다.
- 클래스 이름을 통해 직접 접근할 수 있다.
- 메모리를 효율적으로 사용할 수 있다.
예제:
위 예제에서 staticProperty와 staticMethod는 Example 클래스의 정적 속성과 정적 메서드이다.
이들은 클래스의 인스턴스를 생성하지 않고도 Example.staticProperty와 Example.staticMethod()처럼 클래스 이름을 통해 직접 접근할 수 있다.
정적 메서드를 통해 인스턴스 메서드 접근
다음은 클래스에 정적 메서드를 호출하여 인스턴스를 얻고, 그 인스턴스를 통해 인스턴스 메서드를 호출하는 방식을 보여준다.
설명
정적 메서드 정의:
getInstance는 MyClass의 정적 메서드로, 클래스 이름을 통해 직접 호출할 수 있다.
이 메서드는 MyClass의 인스턴스를 생성하여 반환한다.
MyClass(name) 생성자를 호출하여 새로운 인스턴스를 반환한다.
여기서 name은 '홍길동'으로 전달된다.
getInstaince를 통해 인스턴스를 생성하면 클래스 안에 정의된 것 처럼 생성자 MyClass(name)를 반환하여 생성자 MyClass(this.name)에 저장된다.
정적 메서드 호출 및 인스턴스 메서드 호출:
MyClass.getInstance('Alice')를 호출하여 MyClass의 인스턴스를 생성한다.
여기서 MyClass는 인스턴스가 아니라 클래스 자체이다.
생성된 인스턴스는 코드상에서 명시적으로 변수에 할당되지 않는다.
한마디로 가상으로 인스턴스를 만들었다고 보면 된다.
이때 getInstance는 정적 메서드이므로 클래스 이름을 통해 직접 호출한다.
생성된 인스턴스를 통해 greet 인스턴스 메서드를 바로 호출할 수 있다.
실제 플러터에서 사용 예시
실제 플러터 프로젝트를 진행할 때, 위와 같이 정적 메서드 뒤에 바로 메서드를 호출하는 방식을 사용하는 상황들이 있다.
대표적으로 Navigator 위젯을 사용할 때 인데, 아래 예제를 살펴보자.
Navigator 클래스를 명시하여, 클래스에 of 정적 메서드를 붙이고, 인스턴스 메서드인 pop를 불러온다.
하지만 여기서는 위 예제처럼 정적 메서드 of가 직접 인스턴스를 생성하지 않는다.
다만, 주어진 context에서 가장 가까운 이미 존재하는 Navigator 인스턴스를 찾아 반환한다.
이는 MyClass.getInstance(String name)와는 다르게 동작한다.
MyClass.getInstance는 새로운 인스턴스를 생성하여 반환하는 반면, Navigator.of(context)는 기존의 인스턴스를 반환한다.
이는 Flutter의 위젯 트리에서 context를 통해 상위로 올라가면서 Navigator 인스턴스를 찾는 방식이다.
Navigator의 인스턴스도 마찬가지로 코드에 직접 명시되어 있지 않고, Flutter 애플리케이션을 생성할 때 MaterialApp이나 CupertinoApp과 같은 루트 위젯을 사용하면, 이 위젯들이 내부적으로 Navigator 인스턴스를 생성하고 관리한다.
따라서, Navigator 인스턴스는 프로젝트를 생성하고 MaterialApp이나 CupertinoApp을 사용한 순간 자동으로 생성된다.
주의사항
- 정적 메서드에서는 this 키워드를 사용할 수 없다.
- 정적 메서드는 오버라이드할 수 없다.
- 과도한 사용은 객체 지향 프로그래밍의 장점을 약화시킬 수 있다.
'Dart > OOP' 카테고리의 다른 글
Dart 메서드의 매개변수 타입으로 클래스 사용하기 (1) | 2024.08.31 |
---|---|
Dart 문법 OOP - enum (0) | 2024.08.21 |
Dart 문법 OOP - 메서드 호출, 캐스케이드 연산자 (0) | 2024.08.21 |
Dart 문법 OOP - static (0) | 2024.08.21 |
Dart 문법 OOP - 제네릭 (0) | 2024.08.21 |

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!