[앱개발-flutter] 클래스 / dart 문법

도톨이·2024년 2월 2일
0

앱 개발-flutter

목록 보기
11/29

클래스와 객체

클래스는 객체 지향 프로그래밍에서 데이터와 이를 조작하는 메소드를 함께 묶는 방법입니다. Dart에서 클래스는 객체를 생성하는 템플릿 역할을 합니다. 객체는 클래스의 인스턴스로, 클래스에 정의된 속성과 기능을 실제로 사용할 수 있게 해줍니다.

클래스의 기본 구조


Dart에서 클래스를 정의할 때는 class 키워드를 사용합니다. 클래스 내에서는 변수(속성)와 함수(메소드)를 정의할 수 있습니다. 예를 들어, 사람(Person) 클래스는 번호(no), 이름(name), 나이(age), 몸무게(weight) 등의 속성을 가질 수 있으며, 걷기(walk)나 먹기(eat) 같은 행동을 메소드로 정의할 수 있습니다.

실제 앱 개발에서의 응용


Dart와 Flutter를 사용한 앱 개발에서 클래스는 중요한 역할을 합니다. 예를 들어, 사용자 인터페이스의 각 부분은 위젯으로 표현되며, 각 위젯은 Dart 클래스로 구현됩니다. 클래스를 사용하면 코드의 재사용성과 유지 보수성이 향상되며, 복잡한 앱의 구조를 효과적으로 관리할 수 있습니다.

예시: 사용자 프로필 페이지를 구현할 때, User 클래스를 정의하여 사용자의 이름, 프로필 사진, 친구 목록 등을 관리할 수 있습니다. 각 사용자 객체는 User 클래스의 인스턴스로, 앱 전반에 걸쳐 일관된 방식으로 사용자 데이터를 처리하고 표시할 수 있습니다.

코드 간단한 예시


아래 코드 예시로 이해해봅시다.

코드 예시에서 Person 클래스는 사람을 나타내며, no, name, age, weight 속성과 walk, eat 메소드를 포함합니다. main 함수에서는 Person 객체를 세 개 생성하고, 각 객체의 name 속성에 다른 이름을 할당한 후, walk와 eat 메소드를 호출하여 각 객체의 행동을 출력합니다.


void main() {
	// 클래스명 변수명 = new 클래스명();
	Person p1 = new Person();
    
    var p2 = new Person();
    
    var p3 = Person();
    p1.name = '전영주';
    p2.name = '전일주';
    p3.name = '전이주';
    
    p1.walk('극장');
    p2.walk('시장');
    p3.eat('짬뽕');
    p1.eat('초밥');
    
    }

// [1] 사람 클래스
// [2] 번호, 이름, 나이, 몸무게 속성
// [3] run() 메소드, eat(), walk() 메소드

class Person {
	int no;
    String name;
    int age;
    double weight;
    
    
    void walk(String str) {
    	print('${this.name} 님이 $str 으로 걸어갑니다.');
        }
    void eat(String food) {
    	print('${this.name} 님이 $food 를 먹습니다.');
        }
    

}

실행결과는 다음과 같습니다.

접근 제한자


접근 제한자는 객체 지향 프로그래밍에서 매우 중요한 개념으로, 클래스 내부의 멤버(속성이나 메소드)가 외부에서 접근 가능한지 여부를 결정합니다. 다른 언어에서는 public, private, protected 등 다양한 접근 제한자를 제공하지만, Dart 언어는 이를 좀 더 심플하게 접근합니다.

Dart에서는 멤버가 기본적으로 외부에 노출되어 public으로 간주되며, 이는 별도로 표시하지 않아도 됩니다. 반면, 멤버를 비공개(private)로 만들고 싶을 때는 이름 앞에 언더바(_)를 붙여서 표현합니다. protected와 같은 접근 제한자는 Dart에 직접적으로 존재하지 않지만, 패키지 레벨에서 비슷한 효과를 낼 수 있습니다.

예시: 접근 제한자 사용하기


아래 예시는 Dart에서 public과 private 멤버를 어떻게 정의하고 사용하는지 보여줍니다.

class BankAccount {
  // public 멤버: 외부에서 접근 가능
  String owner;
  
  // private 멤버: 이 클래스 내부에서만 접근 가능
  double _balance;

  // 생성자
  BankAccount(this.owner, this._balance);

  // public 메소드
  void deposit(double amount) {
    _balance += amount;
    print('$owner has deposited $amount');
  }

  // private 메소드
  void _calculateInterest() {
    // 이자 계산 로직
  }

  // 잔액 조회를 위한 public 메소드
  double getBalance() {
    return _balance;
  }
}

void main() {
  var account = BankAccount('전영주', 1000.0);
  
  account.deposit(500.0); // 가능
  print('Balance: ${account.getBalance()}');
  
  // 아래의 코드는 에러를 발생시킴. _balance와 _calculateInterest는 private 멤버이기 때문에 외부에서 접근할 수 없음.
  // print(account._balance);
  // account._calculateInterest();
}
profile
Computer Engineering

0개의 댓글

관련 채용 정보