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 둘의 차이점은 뭐지?
복복씨
복복씨
개발자여, 사고하라 !
  • 복복씨
    정리노트
    복복씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (119) N
      • 개발새발자 (22) N
        • 의 삶 (7)
        • 의 회고 (9)
        • 의 낙서장 (6) N
        • 영어 (0)
      • Flutter (39)
        • 새싹 (5)
        • Dart (8)
        • Flutter (15)
        • iOS 에서 Flutter 로 전환하며 (2)
        • 챗지피티랑놀.기 (3)
        • 하루 한 입 플러터 (2)
      • CS (7)
        • 짤막지식 (6)
      • IOS (6)
        • Swift (0)
        • UIKit (1)
        • SwitUI (4)
      • 머신러닝-딥러닝 (28)
        • 논문리뷰 (3)
        • study (16)
        • Kaggle (9)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    IOS
    깊은참조
    getit
    핫 리로드
    유리과일 자르기
    dart
    유리과일
    플러터 di
    멋쟁이 사자처럼
    플러터 새싹
    FLUTTER
    새싹 플러터
    unawaited
    새싹 용산
    부트캠프
    swiftui 플러터
    새싹
    runzonedguarded
    코드 결합도
    futurerecord2
    시그널링데이터
    expando
    asmr 프롬프트
    veo3
    schedulemicrotask
    flutter 애니메이션
    사그널링서버
    플러터
    용산캠
    ai asmr
  • 최근 댓글

  • 최근 글

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

티스토리툴바