AutoMapper는 겉보기에는 복잡해 보이는 문제――한 객체를 다른 객체에 수동으로 매핑하는 작업――를 해결하기 위한 작고 단순한 라이브러리입니다. 이러한 속성 대입 코드는 반복적이고 지루하기 마련인데, AutoMapper는 객체 매핑을 자동화하는 도구입니다.
객체-객체 매퍼: 한 타입의 입력 객체를 다른 타입의 출력 객체로 변환합니다.
AutoMapper에는 일련의 규약이 내장되어 있어, 대상 클래스가 명명 규약을 따르기만 하면 두 타입 간의 매핑을 거의 제로 구성으로 완료할 수 있습니다.
매핑 코드를 손으로 작성하는 것은 지루하고, 이를 테스트하는 것은 더욱 지루합니다. AutoMapper는 간단한 타입 구성을 제공하며, 매핑 로직에 대한 단위 테스트도 지원합니다.
설치
NuGet 패키지 관리자 콘솔을 통해 설치
PM> Install-Package AutoMapper
관련 확장 패키지
- AutoMapper.Data: ADO.NET 지원,
IDataReader에서 데이터를 읽어 매핑 가능 - AutoMapper.EF6: EF6용 확장 메서드, 비동기
ProjectTo프로젝션 제공 - AutoMapper.Collection: 컬렉션 동등성 매핑, 두 컬렉션을 비교하고 객체 동등성 검사 지원
- AutoMapper.Collection.EF: EF 기본 키와 결합하여 동등성 판별, 컬렉션의 추가/수정/삭제 자동 처리, DTO 컬렉션에서 데이터베이스 엔티티 컬렉션으로의 영속화 작업 구현
기존의 수동 객체 대입 예제
People(소스)와 Person(대상) 두 클래스가 있으며, 속성 이름이 완전히 동일함
class People
{
public int Age { set; get; }
public string Name { set; get; }
}
class Person
{
public int Age { set; get; }
public string Name { set; get; }
}Code language: JavaScript (javascript)
기존 방식: 속성을 하나씩 수동으로 대입:
static void Main(string[] args)
{
People p = new People() { Age = 13, Name = "Jack" };
Person person = new Person();
// 각 속성을 수동으로 복사. 속성이 많으면 코드가 매우 장황해짐
person.Name = p.Name;
person.Age = p.Age;
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
Console.ReadKey();
}Code language: JavaScript (javascript)
단점: 속성이 많을수록 반복되는 대입 코드가 늘어남. 필드를 추가하거나 수정할 때 모든 대입 코드를 함께 수정해야 하며, 놓치기 쉬워 버그가 발생할 수 있음.
AutoMapper의 역할: 위와 같이
xxx.속성 = yyy.속성을 일일이 작성하는 대신, 규약에 따라 동일한 이름의 속성을 자동으로 복사함.
AutoMapper란?
Next: 설치 및 첫 번째 예제