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
최근댓글