레포지토리 패턴은 데이터 소스(데이터베이스, API 등)에 대한 접근 로직을 캡슐화하여 도메인 로직과 데이터 저장 메커니즘 사이에 추상화 계층을 제공합니다. 주요 목표는 저장 구현 세부사항을 숨기고 도메인 객체의 컬렉션 작업을 보장하는 것입니다.
장점:
C# 코드 예:
public interface IUserRepository { User GetById(int id); void Add(User user); } public class UserRepository : IUserRepository { private readonly DbContext _context; public UserRepository(DbContext context) { _context = context; } public User GetById(int id) => _context.Users.Find(id); public void Add(User user) => _context.Users.Add(user); }
주요 특징:
레포지토리가 데이터베이스 구조를 알아야 하나요?
아니요. 레포지토리는 도메인 객체를 처리하고 저장 세부사항을 숨겨야 합니다. 별도의 데이터 접근 계층이 데이터베이스 스키마에 대한 매핑을 처리합니다.
레포지토리 클래스 내에 비즈니스 로직을 섞어도 되나요?
아니요. 이는 책임 분리 원칙을 위반합니다: 레포지토리는 데이터의 가져오기/저장만 담당해야 합니다. 비즈니스 로직은 서비스/도메인 객체로 이전해야 합니다.
레포지토리와 DAO는 동일한 건가요?
그렇지 않습니다. DAO는 레포지토리 패턴과는 정형적이지 않으며, 테이블과 레코드 수준에서 작동하는 반면, 레포지토리는 비즈니스 로직 객체와 함께 작업합니다. 레포지토리는 비즈니스 엔티티의 컬렉션을 추상화하고, DAO는 인프라에 더 가깝습니다.