본문 바로가기

C#

AutoMapper란?

728x90

AutoMapper란?

  • AutoMapper는 객체 전환간에 Property 값을 자동으로 매핑해주는 오픈소스 라이브러리이다.
  • 보통 DTO -> Entity 객체간 전환에 대표적으로 많이 사용한다. (DTO : 데이터 수송 객체(Data Transfer Object))
    • 클라이언트의 Request body로 받은 DTO 객체는 비즈니스 로직을 실행하기 위해 Entity로 변환하는 작업이 필요하다.
    • 또한 Response body에 데이터를 전달하려면 Entity를 다시 DTO로 변환해야 할 것이다.
    • 두 클래스의 변환 작업은 Mapper 클래스를 구현하여 해결할 수 있으며, 이를 통해 계층 간의 역할을 분리할 수 있다.
  • 여러 개의 DTO를 하나의 DTO로 합친다거나, 반대로 하나의 DTO를 여러개로 쪼갠다거나, 아니면 비슷하지만 다른 형태의 DTO로 바꾼다거나 하는 등의 작업들을 할 때 유용하게 사용할 수 있다.

 

  • AutoMapper를 이용하면 불필요한 혹은 지루한 반복작업을 상당 부분 줄일 수 있다.
  • DTO의 사용 범위는 명확하게 정의되어 있지 않다. 이보다는 도메인 모델 보호의 관점으로 접근하는 것이 더 중요해 보인다.

 

AutoMapper 설치

- Visual Studio에서 AutoMapper 누겟 패키지를 설치하여 사용할 수 있다.

Install-Package AutoMapper

 

AutoMapper 사용

하지만 일반적으로는 SourceType과 TargetType 사이에 속성이름이 살짝 다른 경우가 있다. 이럴 땐 아래와 같은 추가 작업을 해주면 된다.

public class SourceType
{
  public int SourceId { get; set; }
  public string Value { get; set; }
  public DateTime DateUpdated { get; set; }
}

public class TargetType
{
  public string Value { get; set; }
  public DateTime DateChanged { get; set; }
}

위에서 보다시피, SourceType.DateUpdate 속성이 TargetType.DateChanged 속성으로 바뀌어야 한다. 이럴 땐 아래와 같이 정의를 해준다.

Mapper.CreateMap<SourceType, TargetType>()
      .ForMember(d => d.DateChanged, o => o.MapFrom(s => s.DateUpdated));

.ForMember() 메소드는 두 객체간 다른 속성을 매핑 시킬 경우 어떻게 해야 하는지를 알려주는 메소드이다. 이는 연속해서 사용할 수 있다. 이 응용은 가장 많이 쓰이는 것이므로 잘 기억을 해 두도록 한다. 이후로 동일한 작업을 해보자.

var source = new SourceType() { SourceId = 1, Value = "value", DateUpdated = DateTime.Today };
var target = Mapper.Map<TargetType>(source);

결과는 아래 링크에서 확인할 수 있다.

https://dotnetfiddle.net/oj5Jg0

 

 

[출처]
https://velog.io/@given53/Spring-Mapper
https://blog.aliencube.org/ko/2015/03/24/introducing-automapper/

https://afsdzvcx123.tistory.com/entry/C-AutoMapper-AutoMapper-%EB%9E%80

728x90

'C#' 카테고리의 다른 글

마샬링(Marshalling)  (0) 2023.11.04
Delegate와 Event  (0) 2023.11.03
LiteDB  (0) 2023.01.31
싱글톤 패턴(Singleton Pattern)  (0) 2023.01.30
구조체(struct)와 클래스(class)의 차이  (0) 2023.01.30