MapStruct는 서로 다른 타입의 객체를 서로 변환해야 할 때 사용되는 도구다.
간단한 코드: 복잡한 변환 코드를 직접 작성할 필요 없이, 인터페이스에 메소드를 선언하기만 하면 된다. MapStruct가 실제 구현을 자동으로 생성해준다.
빠른 실행 속도: MapStruct는 컴파일 타임에 코드를 생성하기 때문에, 런타임에 성능 저하 없이 빠르게 작동한다.
자동 업데이트: 소스 객체의 변화가 있을 때, 타겟 객체에 자동으로 반영되게 설정할 수 있다.
하지만 간단한 코드에 절대 속아선 안된다
이렇게 간단하게 @Mapper 어노테이션과 변환하고자 하는 메서드를 작성하고 build하면
자동으로 구현체가 생성된다 안을 뜯어보면 entity와 dto에서 붙여둔 어노테이션, 빌더나 getter를 기반으로 자동 업데이트되어 변환작업을 해준다
정말 MapStruct는 신일까?
머리가 띵할것.. 아직도 MapsStruct이 편해보이는가
단순하게 같은 자원을 공유하고 있고 컬럼의 차이가 없을때는 간단하게 매핑이 되지만
연관관계가 복잡해서 responseDto로 변환할때 여기저기 도메인에서 정보를 가져와서 만들어야 한다면 직접 @Mapping 어노테이션과 함께 target 어디에 source 어떤 데이터를 넣어줄지 명시해줘야 한다
하지만 중간에 수행해야 할 로직이 있다거나 도메인값으로 다 바꿀 수 없다면
@AfterMapping을 통해 명시해준 자원끼리의 매핑이 완료 된 후에 수행해야 할 로직을 실행할 수 있다
열심히 만든 메서드가 모든 매핑이 완료 된후에 호출되는 것을 볼 수 있다.
개발에 왕도는 없고 라이브러리에 답은 없다 항상 상황에 맞는 필요한 라이브러리를 사용하도록 하자