SportsEcho(1)

문정현·2024년 1월 5일
0

dto vs individual parameter

Product product = Product.create(requestDto.getTitle(), requestDto.getContent(), requestDto.getPrice());

Product product = Product.create(requestDto);

객체를 생성할 때 DTO를 직접 전달하는 방식과 각 파라미터를 개별적으로 전달하는 방식에서 많은 고민이 있었다
이는 정답이 없는 문제로 결론부터 말하면 팀별 회의를 통해 정하는 것이 맞다 이다.

각각의 장단점을 정리하고 넘어가자

  1. DTO를 전달하는 방식
  • 장점:
    - 코드의 간결성 : 메소드 호출이 더 간결해진다.
    - 확장성 : dto에 새로운 필드가 추가되더라도 변경이 편리하다.
  • 단점:
    • 의존성 : Product 클래스가 RequestDto클래스에 의존하게 된다.
    • 유연성 제한 : 특정 필드만 사용하여 객체를 생성하고 싶을 때 제한적임.
  1. 개별 파라미터를 전달하는 방식
  • 장점
    - 유연성 : 필요한 파라미터만 선택적으로 전달할 수 있다.
    - 의존성 감소 : dto에 대한 의존성이 낮아진다.
  • 단점
    - 복잡성 : 파라미터가 많아질수록 메소드 호출이 복잡해진다.
    - 확장성 제한 : 새로운 필드가 추가될 때마다 메소드 변경이 필요하다.

우리팀은 의존성을 줄이는것이 중요하다 생각해서 개별 파라미터를 전달하여 생성하기로 했다. 새로운 필드가 추가될 때마다 메소드 변경은 조금 번거로울 뿐이지만 치명적인 이슈를 만들진 않기 때문!

빌더패턴 그리고 정적 팩토리 메소드

정적 팩토리 메소드를 도입하기 앞서 빌더 패턴과 정적 팩토리 메소드 두가지의 객체 생성을 위한 방식의 차이점과 장단점을 비교해보았다

빌더 패턴

    @Builder
    public Product(String title, String content, String imageUrl) {
        this.title = title;
        this.content = content;
        this.imageUrl = imageUrl;
    }

차이점

  • 빌더 패턴은 복잡한 객체를 단계별로 구축하는 방식이다.
  • 객체의 생성과 표현 방식을 분리하여, 동일한 생성 과정에서 다른 표현 결과를 얻을 수 있다.
  • 필요한 속성만 설정할 수 있으며, 설정 순서가 자유롭다.

장점

  • 가독성이 높고 사용하기 쉽다.
  • 필수적이지 않은 속성을 생략할 수 있어 유연성이 좋다.
  • 불변성을 유지할 수 있다.

단점

  • 객체 생성을 위한 별도의 빌더 클래스가 필요하다.
  • 코드 양이 증가할 수 있다.

정적 팩토리 메소드

	// 빌더를 이용하여
    public static Product create(String title, String content) {
        return Product.builder()
            .title(title)
            .content(content)
            .imageUrl(imageUrl)
            .build();
    }

차이점

  • 객체 생성을 위한 정적 메소드를 제공한다.
  • 생성자 대신 사용되어 의미 있는 이름을 가질 수 있다.

장점

  • 이름을 통해 생성 방식을 명확히 전달할 수 있다.
  • 호출될 때마다 새로운 객체를 생성하지 않아도 된다.
  • 반환 타입의 하위 타입 객체를 반환할 수 있다.

단점

  • 상속을 사용할 때 문제가 될 수 있다.
  • 다른 정적 메소드와 구별하기 어렵다.

아직 팀원들 내부적으로 정적 팩토리 메소드의 당위성을 찾는 중이다 아마 static을 사용하는 것에 대한 깊은 고민과 이해를 동반해야 할 것인데 각자 고민해보고 내일 정할 것이다.

profile
주니어 개발자를 꿈꾸며

0개의 댓글