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 |