Model, Repository

허준호·2025년 6월 27일

dart 언어 공부

목록 보기
13/16
post-thumbnail

Model

애플리케이션에서 사용되는 데이터를 표현하는 클래스 또는 객체를 의미한다

특징

  • 데이터 모델은 데이터의 구조와 속성을 정의하며, 데이터의 유효성을 검증하고 데이터를 조작하는 데 사용된다
  • 일반적으로 별도의 기능을 가지지 않는 순수한 클래스로 작성한다. toJson, fromJson, copyWith, toString, ==, hashCode 등 기본적인 메소드만 정의한다.

모델링 방법

  1. DDD(Domain Driven Design)
    • 소프트웨어 개발 방법론 중 하나로, 비즈니스 도메인을 중심으로 소프트웨어를 설계하고 구현하는 방식이다
    • 도메인은 소프트웨어가 해결하고자 하는 실제 비즈니스 영역이다. 예를 들어, 은행 어플리케이션의 도메인은 고객, 계좌, 거래등이 될 수 있다
  2. ORM (Object-Relational Mapping)
    • 데이터 소스가 DB인 경우 DB와 모델 간 상호 변환을 도와주는 기법이다

불변 객체

모델 클래스의 속성을 직접적으로 수정할 수 없게 한다

  • 값 변경을 위해서는 copyWith 메서드를 제공해준다
  • ==, hashCode 메서드를 재정의한다
class User {
	final int id;
	final String name;
	
	const User(this.id, this.name);
}

const로 정의한 불변 객체

void main() {
	final user1 = const User(1, '홍길동');
	final user2 = const User(1, '홍길동');
	
	print(identical(user1, user2)); // true 출력
	
	final user3 = User(1, '홍길동');
	final user4 = User(1, '홍길동');
	
	print(identical(user3, user4)); 
	// false 출력. User() 앞에 new가 생략되어 있음
	
	const user5 = User(1, '홍길동');
    final user6 = const User(1, '홍길동');

    print(identical(heo, heo1)); 
    // true. User() 앞에 const가 생략되어 있음
}

Repository 패턴

데이터 저장소와 애플리케이션 사이의 중간 계층 역할을 수행한다

특징

  • 데이터 접근에 대한 추상화 계층이다
  • 데이터 소스를 은닉한다
  • 데이터를 매핑하고, 변환시키는 역할을 담당한다

장점

  • 관심사를 분리시키고, 코드 재사용이 가능하여 유지보수성이 향상된다
  • 단위 테스트 작성에 용이하다
  • 새로운 데이터 소스를 추가하는데 용이하여 확장성이 좋다

각각의 역할

  1. Data Source: JSON String 을 Map<String, dynamic> 이나 List 으로의 변경과 CRUD 작업에 집중한다
  2. Repository: 비즈니스 로직에만 집중한다. 데이터 소스에서 가져온 데이터를 사용하여 Model로 변환하고 가공하여 앱의 필수적인 기능을 제공한다
  3. Model: 외부 데이터가 아닌 앱 내에서 사용되는 순수한 데이터 모델이다
profile
후추랑 소금 좋아하는 개발자

0개의 댓글