[Flutter] Dart 연관관계와 믹스인

2025. 1. 7. 12:05·Flutter
728x90
반응형
SMALL

연관관계?

- 객체들이 서로 연결되어 있는 일반적인 관계 

- 컴포지션 관계, 연관관계로 구성 

 

컴포지션 관계 [강한 소유 관계]

- 부분-전체 관계 중에서 생명주기가 밀접하게 연관된 강한 소유 관계를 의미한다.

- 전체 객체가 소멸될 때 부분 객체도 함께 소멸 된다.

- 예시: 차 와 엔진 클래스  

 

집합 관계 [약한 소유 관계]

- 부분-전체 관계 중에서 전체와 부분이 생명주기가 독립적인 관계를 말한다.

- 전체 객체가 소멸될 때 부분 객체는 독립적으로 존재할 수 있다.

- 예시 : 부서와 직원 클래스를 생각할 수 있다.

- 부서 객체가 소멸되더라도 직원 객체는 계속 존재할 수 있다.


 

예시코드 [컴포지션]

class Car {
  final Engine engine;

  // 생성자 코드 1. 축약버전 --> 생성자 바디부분 생략
  //Car(String enginType) : engine = Engine(enginType);

  // 생성자 코드 2.
  Car(String enginType) : engine = Engine(enginType) {
    print('생성자 호출 시 내부 스택 메모리가 호출된다.');
  }

  void startCar() {
    engine.startEngine();
    print('차가 출발 합니다.');
  }
}

//  Car(this.engine);


// 코드의 시작점
void main() {
  Engine v9Engine = Engine('v8');
  // Car car = Car(v9Engine);

  ////////////////////////////
  Car car1 = Car('v8');
  // 누군가 참조하고 있지 않다면 GC 대상이 된다.
}

 


예시코드 [집합]

class Employee {
  final String name;

  Employee(this.name);

  void displayEmployeeInfo() {
    print('직원의 이름 : ${name}');
  }
}

class Department {
  final String deptName;
  final List<Employee> employees;

  Department(this.deptName) : employees = [] {
    print("=== Department 생성자 내부 스택 호출 ===");
  } // [] -> 리터럴 표기법

  void addEmployee(Employee e) {
    employees.add(e);
  }

  void displayDepartmentInfo() {
    print('-------------------');
    print('부서의 이름 : ${deptName}');
    for (var emp in employees) {
      emp.displayEmployeeInfo();
    }
  }
}

// 코드의 시작점
void main() {

  Department department1 = Department('개발부');
  Department department2 = Department('디자인부');
  Employee emp1 = Employee('홍길동');
  Employee emp2 = Employee('김철수');
  Employee emp3 = Employee('야스오');

  department1.addEmployee(emp1);
  department1.addEmployee(emp2);
  department2.addEmployee(emp3);

  department1.displayDepartmentInfo();
  department2.displayDepartmentInfo();
}

 

믹스인?

- 여러 계층에서 코드를 재사용 할 수 있도록 하는 코드 조각

 

▶ 기억해야할 것

- 상속구조를 사용하면 단일 상속만 허용

- 믹스인을 사용하면 여러 계층에서 코드의 조각들을 편하게 가져올 수 있다.

- 단 믹스인은 인스턴스화 되는 것은 아니다 ! (예시:  Wheel wheel = Wheel();)

 

// 믹스인 사용해보기
// 여러 계층에서 코드를 재사용할 수 있도록 하는 코드 조각

mixin Engine {
  int power = 5000;
}

mixin Wheel {
  String wheelName = '4륜 구동 바퀴';
}

class BMW with Engine, Wheel {}

void main() {
  // 인스턴스화 시킴
  BMW bm1 = BMW();
  print(bm1.power);
  print(bm1.wheelName);

}

 

믹스인을 인스턴스화 시킬수 있다! --> 믹스인 클래스로 선언!

 

// 믹스인을 인스턴스화 시킬 때 사용하는 문법

mixin class Engine {
  int power = 5000;
}

mixin class Wheel {
  String WheelName = '사륜구동바퀴';
}

class BMW with Engine, Wheel {}

void main() {
  BMW b = BMW();
  Engine e = Engine(); // 믹스인 클래스는 인스턴스화 가능하다.
  Wheel w = Wheel();

  print(b.power);
}

 

728x90
반응형
LIST

'Flutter' 카테고리의 다른 글

[Flutter] 플러터 기본기 다지기 (1)  (0) 2025.01.08
[Flutter] Dart 추상 클래스  (0) 2025.01.07
[Flutter] Dart Null Safety  (0) 2025.01.06
[Flutter] store-app (1)  (0) 2025.01.06
[Flutter] SDK 변경  (0) 2025.01.06
'Flutter' 카테고리의 다른 글
  • [Flutter] 플러터 기본기 다지기 (1)
  • [Flutter] Dart 추상 클래스
  • [Flutter] Dart Null Safety
  • [Flutter] store-app (1)
junhyeokkk
junhyeokkk
나의 개발자 성장기
  • junhyeokkk
    백엔드 개발자 준혁의 성장일지
    junhyeokkk
  • 전체
    오늘
    어제
    • 분류 전체보기 (59)
      • Flutter (13)
      • 개발환경구축 (3)
      • HTTP (0)
      • CS지식 (5)
      • 코딩테스트 (10)
      • JAVA (7)
      • 데이터베이스 (7)
      • Node.js (9)
      • TypeScript (1)
      • Azure (3)
      • Git (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    RDBMS
    Flutter
    CS지식
    라이브러리
    node
    nodejs
    Typescript
    db
    cosmos db
    MSsql
    node.js
    백엔드개발
    sql튜토리얼
    디자인패턴
    코딩테스트
    데이터베이스
    azure
    백엔드
    프로그래머스
    개발자
    마이크로소프트sql
    백엔드개발자
    DART
    programmers
    개발자준비
    Microsoft
    자바
    js
    알고리즘
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
junhyeokkk
[Flutter] Dart 연관관계와 믹스인
상단으로

티스토리툴바