ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Dart] Libraries & imports (접근제한자)
    Flutter/dart 2024. 5. 19. 22:35

    1. Public

    별도로 명시하지 않으면 기본적으로 Public. 다른 모든 클래스나 파일에서 접근이 가능하다.

    2. Private

    변수나 메서드 이름 앞에 _ 를 붙이면 된다.
    해당 클래스나 라이브러리 내에서만 접근이 가능하다.

    3. library (라이브러리 스코프)

    같은 library로 묶인 파일들은 패키지의 private 멤버에 접근할 수 있다.


    part - 한 라이브러리 파일 내에서 서브파일들을 지정한다.
    part of - 라이브러리의 서브파일은 라이브러리의 private 변수에 접근할 수 있다.

    library.dart (메인 라이브러리 파일)

    library my_library;
    
    part 'part1.dart';
    part 'part2.dart';
    
    class LibraryClass {
      String _privateVariable = 'This is private';
    
      void _privateMethod() {
        print('This is a private method');
      }
    }

     

    part1.dart (서브파일 1)

    part of my_library;
    
    void accessPrivateMember() {
      LibraryClass lib = LibraryClass();
      print(lib._privateVariable); // 접근 가능
      lib._privateMethod(); // 접근 가능
    }
    
    class Part1Class {
      String _privateVariablePart1 = 'Private in Part1';
    
      void _privateMethodPart1() {
        print('Private method in Part1');
      }
      
      // part1과 part2 서브파일 간에는 서로 접근 불가능.
      void accessPart2() {
        // 아래의 코드는 에러를 발생시킵니다.
        // Part2Class part2 = Part2Class();
        // print(part2._privateVariablePart2); // 접근 불가
        // part2._privateMethodPart2(); // 접근 불가
      }
    }

     

    part2.dart (서브 파일 2)

    part of my_library;
    
    void anotherAccessPrivateMember() {
      LibraryClass lib = LibraryClass();
      print(lib._privateVariable); // 접근 가능
      lib._privateMethod(); // 접근 가능
    }
    
    class Part2Class {
      String _privateVariablePart2 = 'Private in Part2';
    
      void _privateMethodPart2() {
        print('Private method in Part2');
      }
    
      // part1과 part2 서브파일 간에는 서로 접근 불가능.
      void accessPart1() {
        // 아래의 코드는 에러를 발생시킵니다.
        // Part1Class part1 = Part1Class();
        // print(part1._privateVariablePart1); // 접근 불가
        // part1._privateMethodPart1(); // 접근 불가
      }
    }

     

     

    댓글

Designed by Tistory.