1. 생성자를 잘 구성하자

 

public Post(
            UUID id,
            String title,
            String body,
            UUID authorId
    ) {
        OffsetDateTime now = OffsetDateTime.now();
        this.id = id;
        this.title = title;
        this.body = body;
        this.authorId = authorId;
        this.createdDateTime = now;
        this.modifiedDateTime = now;
        this.tags = new HashSet<>(DEFAULT_MEMORY_ALLOCATION);
        this.comments = new ArrayList<>(DEFAULT_MEMORY_ALLOCATION);
        this.userReactions = new EnumMap<>(ReactionType.class);
    }

 

  • 생성자로 받아와야 하는 것들을 잘 뽑아내자
  • 생성자에 ID는 생성자 내에서 만드는것보다 외부에서 받아오는게 더 좋다
    • 외부에서 받는것이 더욱 객체지향적 사고이다
  • 생성자에 받는 파라미터 type은 그 파라미터에 어울리는 타입으로 작성한다
    • 파라미터명에 어울리는 타입을 작성해야 실수를 줄일 수 있다
      • 예 ExerciseDetail( “josh”, “id”, “weight”, “cycle” ) 로 해도 생성이 가능하기 때문
data class ExerciseDetail(
    val id: String,
    val name: String,
    val cycle: String = "",
    val weight: String = "",
)
-----------------------------
data class ExerciseDetail(
    val id: UUID,
    val name: String,
    val cycle: Int = 0,
    val weight: Int = 0,
)

 

2. 파라미터명을 잘 작성하기

 

  • 잘못된 예
public void updateTitle(UUID id, String text {
        Objects.requireNonNull(authorId);
        Objects.requireNonNull(title);

        if (this.authorId.equals(authorId)) {
            this.title = title;
            this.modifiedDateTime = OffsetDateTime.now();
        }
    }

 

  • 좋은 예
public void updateTitle(UUID authorId, String title) {
        Objects.requireNonNull(authorId);
        Objects.requireNonNull(title);

        if (this.authorId.equals(authorId)) {
            this.title = title;
            this.modifiedDateTime = OffsetDateTime.now();
        }
    }

위 이미지 처럼 실제 메서드를 사용할때는 메서드 명과 옆에 파라미터를 보고 코딩하기 때문에 특정하기 쉬운 파라미터명과, type을 잘 작성해 주는것이 필요

 

 

3. Object 의 책임을 분명히 하기

 

  • 실제 설계중 마주했던 문제점
    • 클래스 메서드는 클래스의 역할에 집중하여 설계
      • 블로그 메서드 중에서 Post 를 생성하는것
      • 함수 내부에서 Post를 생성하지만, 메서드가 지니는 책임이 너무 커짐
    • 결합도와 의존성을 위한 설계는 상황에 맞게 (인터페이스, 추상 클래스 사용은 상황에 맞게)
    • 컴포지션 관계와 의존 관계 모두 좋지만 유지보수가 편한 방법으로 설계할것
      • 클래스 숫자가 적어지는게 유지보수가 편해진다고 생각

 

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기