ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Flutter] 연산자와 기호들
    IT 2025. 3. 26. 17:34

    flutter를 사용하다보면 연산자들과 기호들을 맞이하게 되는데 이것이 무엇인지 몰라서 찾아봤습니다.

     

    ? Nullable Type Indicator (널러블 타입 표시)

    플러터의 변수는 기본적으로 Non-Nullable로 선언됩니다. 즉 Null로 둘 수 없습니다.

    그래서 Nullable변수로 만들기 위해서 자료형 뒤에 ? 를 붙이면 Null로 둘 수 있습니다.

     

     

    ! Null Assertion Operator (널 단언 연산자)

    ?와 같이 많이 사용되는 연산자입니다. ?를 이용하여 Null 값이 허용되어 있는 값을, 허용되지 않은 값에 넣으려고 하면 에러가 일어납니다.

    이때 Null 값이 허용되지 않는 값 뒤에 !를 붙이면 에러가 발생하지 않습니다.

    "!"를 써서 확실하게 Not-Nullable 변수에 Nullable 변수를 넣었을 때, 이 변수에 넣었을 경우에는 Nullable 변수는 100% null이 아니고 값이 있다 라고 알려줍니다. 이렇게 하면 컴파일 단계에서 null 체크 없이 코드를 실행합니다.

    하지만, 이렇게 선언하고 나서 null 값이 들어가게 된다면 에러는 일어납니다.

    이 상황은 무조건 개발자 탓입니다.

     

     

    _ underbar, underscore

    "_" 이 기호는 크게 두가지로 사용됩니다.

    첫 번째, 함수 내에 무슨 값을 받을 목적으로 사용되는 자리에 _가 들어가 있다면 이 값은 받아도 사용하지 않는 값이다.

    두 번째, parameter 앞에 _가 배치되어 있다면 (ex. _hello) 자바에서의 private을 의미 합니다.

    즉, _ underscore로 선언한 변수에 접근하려면 해당 클래스 안의 메서드를 통해서만 가능하다 라는 것 입니다.

     

     

    .. double dot, cascade operator

    이것을 사용하면 객체를 계속해서 수정하거나 메서드를 호출하면서, 그 객체 자체를 반환할 수 있습니다.

    즉, 여러 메서드를 체이닝해서 호출할 때 코드가 더 깔끔집니다.

    예시로 리스트에 값을 넣을때, 일반적인 방식은 아래와 같은데,

    void main() {
      List<int> numbers = [];
      
      // 일반적인 방식
      numbers.add(1);
      numbers.add(2);
      numbers.add(3);
    
      print(numbers);  // 출력: [1, 2, 3]
    }

     

    .. 연산자를 사용하면 

    void main() {
      List<int> numbers = []
        ..add(1)
        ..add(2)
        ..add(3);
    
      print(numbers);  // 출력: [1, 2, 3]
    }

    더 간결하고 직관적인 코드가 됩니다.

     

    <> Generic

    <>은 특정 데이터 타입을 일반화하여, 다양한 타입을 유연하게 사용할 수 있도록 하는 기능 입니다.

    예시는 다음과 같습니다.

    제네릭이 없는 코드 같은 경우에는 해당 List에 아무 타입이나 넣을 수 있어서 에기치 않은 오류가 발생할 가능성이 있습니다.

    List numbers = [1, 2, 3];  // 어떤 타입이든 저장 가능
    numbers.add("Hello");  // 문자열 추가 가능 (런타임 오류 발생 가능)
    
    int firstNumber = numbers[0];  // 타입이 명확하지 않음

     

    이러한 문제를 해결하기 위해서 <>을 사용하여 List<int> 를 사용하여 리스트에 int 타입의 값만을 저장 가능하게 선언합니다.

    이렇게 하면 컴파일 시점에 타입 검사가 가능하여, 잘못된 타입을 넣을 때 오류를 미리 잡아줘서 예기치 않은 오류를 방지할 수 있습니다.

    List<int> numbers = [1, 2, 3];  // int 타입만 저장 가능
    numbers.add(4);  // ✅ 정상 동작
    // numbers.add("Hello");  // ❌ 오류 발생 (int 타입만 허용)
    
    int firstNumber = numbers[0];  // ✅ 타입이 명확해서 안전함
Designed by Tistory.