본문 바로가기
프레임워크/flutter

flutter 클래스 제대로 활용하기

by seongjko 2023. 9. 26.
728x90

9월 초부터 맨땅에 헤딩하는 식으로 플러터 프로젝트를 하나 진행하고 있다. 

프로젝트를 하다 보니, 자주 등장하는데 도무지 정확한 뜻이 제대로 잡히지 않는 개념들이 있어서 정리하고자 한다.

 

1. 객체 지향 프로그래밍 

위키백과에 따르면, 컴퓨터 프로그램을 단순한 명령어 목록의 관점으로 바라보는 대신, 여러 개의 독립된 단위, 즉 "객체"들의 모임으로써 바라보고자 하는 것이 객체 지향 프로그래밍이다.

객체는 변수와 함수가 모여있는 일종의 코드 뭉치라고 할 수 있다.

 

2. 클래스

객체를 만들기 위한 사용설명서 or 설계도

사용설명서에는 보통, 구성품이 무엇이고, 어떻게 조립해야 하며, 완성되면 어떻게 작동하는지 같은 내용이 적혀있다.

class Human {
    // Instance variables
    String name;
    int hp;
    int mp;
    
    // 생성자(constructor)
    Human(String name, int hp, int mp) {
        this.name = name;
        this.hp = hp;
        this.mp = mp;
    }
    
    // 위의 생성자처럼 쓰는게 귀찮은 개발자들이 아래처럼 써도 괜찮게끔 이리 작업해두었다.
    // Human(this.name, this.hp, this.mp)
    
    // Methods
    void attack() {
        print('attack!!');
    }
    
    void defence() {
        print('defence!!');
    }
}

Instance variable - 구성품이 무엇인가 

생성될 객체에 담겨야 할 변수들을 의미한다. 

 

Constructor - 어떻게 조립하는가 

class를 정의했으면 이 class를 이용해 객체를 만들어 내야한다. 이때 변수들에 어떤 데이터들을 넣어서 만들지 정의해주는 부분이 constructor부분이다. 이부분을 어떻게 작성하느냐에 따라 새로운 객체 생성을 위해 어떤 데이터들을 집어넣어야하는지가 결정된다.

인스턴스를 생성하기 때문에 생성자라고 부른다.

 

Methods - 조립이 완료되면 어떻게 동작하는가

 

3. 인스턴스

객체는 클래스의 인스턴스이며, 클래스의 생성자는 인스턴스를 생성하기 때문에 생성자라고 불린다.

도대체 인스턴스가 무엇일까?

클래스를 통해 만들어진 객체 하나하나를 instance라고 따로 부른다.

객체의 다른 표현이 인스턴스라고 봐도 무방하다.

 

4. 동기? 비동기?

동기 작업 -> A 작업이 끝나야만 B 작업을 수행할 수 있음. 마찬가지로 B 작업이 끝나야만 C 작업을 수행할 수 있음. 

직렬 처리라고 봐도 무방 

비동기 작업 -> 앞선 작업의 작업 종료 여부와는 상관없이 다른 작업을 시작할 수 있음.

병렬 처리라고 봐도 무방

 

5. StatelessWidget? StatefulWidget?

StatelessWidget은 고정된 형태로 한번 그려지고 나면 변화가 없는 위젯, StatefulWidget은 내부에 오는 데이터가 바뀔때마다 다시 그려질 수 있는 위젯이다.

구현된 앱에서 모양의 변동이 없는 부분은 StatelessWidget, 모양이 변동하는 부분을 StatefulWidget이라고 할 수 있겠다.

 

6. @ovdrride?

약간 주석 같은 개념인데 부모 클래스의 메서드보다 자식 클래스의 메서드가 우세하다는 걸 뜻한다. 

class A {
  void foo() {
    print("Class A");
  }
}

class B extends A {}

class C extends A {
  @override foo() {
    print("Class C");
  }
}

void main() {
  A a = A();
  B b = B();
  C c = C();
  a.foo();
  b.foo();
  c.foo();
}

 

output

Class A
Class A
Class C

 

첫 번째 실행 결과는 A 클래스의 메서드를 실행했으므로 그대로 "Class A"가 출력되었다.

두 번째 실행 결과는 A 클래스를 상속하는 B 클래스의 메서드를 실행했으므로 역시나 "Class A"가 출력된다.

세 번째 실행 결과는 A 클래스를 상속하지만 C 클래스 내부의 메서드가 부모 메서드보다 우세하므로 "Class C"가 출력된다. 

 

 

 

참고 사이트

 

https://couldi.tistory.com/24

 

[Dart] 10-1. 클래스(class)

21. 10. 22. - Could - 이 글은 프로그래밍 입문을 Flutter 때문에 Dart로 시작하는 사람들을 위한 글입니다. 프로그래밍 언어가 가지고 있는 기본 컨셉 자체를 Dart라는 언어를 통해 설명하고, 많은 분들

couldi.tistory.com

https://devkingdom.tistory.com/95

 

[OOP] 객체 지향 설계를 해야 하는 이유

내가 컴퓨터 공학을 전공으로 선택한 후, 처음으로 흥미를 느낀 영역은 객체 지향 프로그래밍 (OOP) 이었다. 심지어 휴학을 하고 한 학기 동안 객체지향만 공부한 적도 있었다. (그렇다고 잘하는

devkingdom.tistory.com

 

 

https://couldi.tistory.com/43

 

[Flutter] StatefulWidget vs. StatelessWidget

21. 11. 30. - Could - 1. StatefulWidget vs. StatelessWidget 2. StatelessWidget 3. StatefulWidget 1. Stateful vs. Stateless 플러터의 위젯은 두가지로 구분할 수 있다. State가 있는 녀석과 없는 녀석. 있으면 StatefulWidget이고,

couldi.tistory.com

 

https://velog.io/@majinbuu/flutter-dart%EC%9D%98-override%EB%8A%94-%EB%8C%80%EC%B2%B4-%EB%AD%98%EA%B9%8C

 

flutter dart의 @override는 대체 뭘까?

무념 무상으로 코드를 따라 적다보니 자꾸 눈에 거슬리는 것이 있으니 그것은 바로@override이게 대체 뭐길래 코드줄에 있는 것일까 궁금해졌다.검색해보니 stackoverflow에 나와 비슷한 궁금증을 가

velog.io

 

반응형