static GetIt get instance => _instance; <-- 여기에 쓰인 문법을 모두 설명해보세요.

2024. 10. 14. 14:57·Flutter/Dart
static GetIt get instance => _instance;

이 코드가 이해가 안가서 작성하는 글 

static과 => 연산자의 의미

  • static: 클래스의 인스턴스를 만들지 않고도, 해당 변수나 메서드에 접근할 수 있게 해주는 키워드
  • =>: 화살표(=>)는 Dart에서 간결한 함수 표현식으로, return을 사용하는 대신 값을 간단하게 반환할 때 사용한다. 

문법 분석하기

이 부분을 보자:

static GetIt get instance => _instance;
  • static: instance라는 게터가 클래스의 인스턴스 없이도 바로 접근할 수 있음을 의미
  • GetIt: 이건 반환 타입. (겟잇 라이브러리는 일단 배제하자) instance를 호출하면 GetIt 타입의 값을 반환한다는 뜻.
  • get: Dart에서 get 키워드는 게터를 정의할 때 사용됨. instance는 메서드처럼 보이지만, 사실은 변수처럼 접근할 수 있는 속성
  • => _instance: 이 부분은 instance를 호출할 때 _instance라는 변수를 반환한다는 뜻

즉

이 문법은 instance라는 이름의 게터를 만든 거고, 이 게터는 _instance라는 값을 반환한다. 여기서 중요한 건, 이 instance는 클래스의 인스턴스를 만들지 않고도 접근할 수 있다는 점! (static이기 때문).

예시로 이해해보자

만약 클래스에 이렇게 작성되어 있다면:

class MySingleton {
  static final MySingleton _instance = MySingleton._internal();

  MySingleton._internal(); // 프라이빗 생성자

  static MySingleton get instance => _instance;
}
  • _instance는 클래스 내부에서 생성된 유일한 인스턴스
  • instance 게터를 통해 MySingleton.instance로 접근할 때마다 _instance를 반환함
  • static이기 때문에 클래스의 인스턴스를 만들지 않고도 MySingleton.instance로 접근할 수 있음.

이런 방식은 언제 사용하냐면?

이런 문법은 주로 싱글톤 패턴(Singleton Pattern)을 구현할 때 사용한다.

싱글톤 패턴은 앱 전체에서 하나의 인스턴스만 사용하는 것을 보장하는 패턴이다.

실제로 사용했을 때 앱에서 크게 사용 할 단위는 싱글톤 패턴은 안맞다는걸 알았다. 멀티 스레딩 문제도 있고, 단일책임의 원칙을 지키지 않는 형태로 발전 할 수 있기에 코드가 복잡해지고, 유지보수하기 어려워진다

정리

  • static: 클래스의 인스턴스 없이도 접근 가능한 정적 멤버를 만들 때 사용한다
  • get instance => _instance: 클래스 내부의 _instance를 반환하는 게터를 정의한 거

그래서 MyClass.instance라고 호출하면, 클래스의 유일한 인스턴스인 _instance를 얻을 수 있는 거죠. 이렇게 하면 앱 전체에서 하나의 객체만 공유할 수 있게 됨!!

 

그렇다면 여기에 사용된 get, 그니까 gettetr setter 는 뭐지 ? 

Getter와 Setter란?

  • Getter: 클래스에 있는 특정 변수의 값을 가져올 때 사용하는 것
  • Setter: 클래스에 있는 특정 변수의 값을 바꿀 때 사용하는 것

이 두 가지는 우리가 클래스 안에 있는 변수에 안전하게 접근하고, 그 값을 조절할 수 있도록 도와줌

왜 필요하쥐?

만약 우리가 게임 캐릭터의 체력을 저장하는 변수를 만들었다고 해보자. 이때 캐릭터의 체력은 무조건 0에서 100 사이여야함.

그런데 누군가가 실수로 체력 변수를 -10이나 150처럼 말도 안 되는 값으로 바꿔버린다면 문제가 생겨버린다. 나의 소중한 게임 시스템에.. 

이런 실수를 막기 위해 Getter와 Setter를 사용하는 것. 이걸로 값이 잘못 설정되는 걸 막고, 안전하게 값을 가져오거나 바꿀 수 있다. 내가 원하는 방식으로말이다. 

예시

1. 기본적인 클래스 정의

class Character {
  int _health = 100; // 체력 변수 (앞에 _가 붙으면 외부에서 직접 접근 못 함)

  // Getter
  int get health {
    return _health;
  }

  // Setter
  set health(int value) {
    if (value < 0) {
      _health = 0; // 0보다 작으면 0으로 설정
    } else if (value > 100) {
      _health = 100; // 100보다 크면 100으로 설정
    } else {
      _health = value; // 0~100 사이 값만 허용
    }
  }
}

2. 이 클래스 사용하기

void main() {
  var myCharacter = Character();

  // Getter 사용
  print(myCharacter.health); // 100 출력

  // Setter 사용
  myCharacter.health = 120; // 100으로 설정 (100보다 큰 값이므로)
  print(myCharacter.health); // 100 출력

  myCharacter.health = -10; // 0으로 설정 (0보다 작은 값이므로)
  print(myCharacter.health); // 0 출력

  myCharacter.health = 75; // 정상 범위 값
  print(myCharacter.health); // 75 출력
}

여기서 중요한 것

  • get health: 캐릭터의 체력을 읽을 때 사용한다. myCharacter.health라고 하면 _health 값을 가져온다
  • set health(int value): 캐릭터의 체력을 바꿀 때 사용한다. myCharacter.health = 50처럼 쓸 수 있게 된다.

정리하면

  • Getter는 값을 가져올 때 사용하는 함수
  • Setter는 값을 설정할 때 사용하는 함수

흐흐 이제 저 코드가 제대로 다가온다✌️

저작자표시 비영리 동일조건 (새창열림)

'Flutter > Dart' 카테고리의 다른 글

Dart 클로저 {} 파헤치기 + 익명함수랑 클로저의 차이는 ?  (0) 2024.11.18
멤버 변수 vs 상태  (0) 2024.10.14
fromMap을 사용해 map데이터 쉽게 사용하기  (0) 2024.09.19
Stream, Future 둘의 차이점은 뭐지?  (2) 2024.08.12
Enum이 뭐고, Enhanced Enum은 왜 쓸까?  (0) 2024.08.12
'Flutter/Dart' 카테고리의 다른 글
  • Dart 클로저 {} 파헤치기 + 익명함수랑 클로저의 차이는 ?
  • 멤버 변수 vs 상태
  • fromMap을 사용해 map데이터 쉽게 사용하기
  • Stream, Future 둘의 차이점은 뭐지?
복복씨
복복씨
개발자여, 사고하라 !
  • 복복씨
    정리노트
    복복씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (118)
      • 개발새발자 (21)
        • 의 삶 (7)
        • 의 회고 (9)
        • 의 낙서장 (5)
        • 영어 (0)
      • FrontEnd (1)
        • React (1)
      • Flutter (38)
        • 새싹 (5)
        • Dart (8)
        • Flutter (14)
        • iOS 에서 Flutter 로 전환하며 (2)
        • 챗지피티랑놀.기 (3)
        • 하루 한 입 플러터 (2)
      • CS (7)
        • 짤막지식 (6)
      • IOS (6)
        • Swift (0)
        • UIKit (1)
        • SwitUI (4)
      • 머신러닝-딥러닝 (28)
        • 논문리뷰 (3)
        • study (16)
        • Kaggle (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dart
    flutter lottie
    runzonedguarded
    flutter 애니메이션
    Flutter Lifecycle
    새싹 플러터
    swiftui 플러터
    깊은참조
    멋쟁이 사자처럼
    schedulemicrotask
    시그널링데이터
    부트캠프
    용산캠
    unawaited
    플러터
    사그널링서버
    한주 회고
    플러터 di
    새싹
    플러터 새싹
    핫 리로드
    futurerecord2
    initState()
    expando
    새싹 용산
    getit
    FLUTTER
    코드 결합도
    테킷 앱스쿨
    IOS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
복복씨
static GetIt get instance => _instance; <-- 여기에 쓰인 문법을 모두 설명해보세요.
상단으로

티스토리툴바