강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

부현수님의 프로필 이미지
부현수

작성한 질문수

엔티티 클래스에서 예외..

작성

·

383

0

@Entity(name = "tbl_question")
class Question(
    id: UUID?,

    @Column(name = "title", columnDefinition = "varchar(100)", nullable = false)
    var title: String,

    @Column(name = "content", columnDefinition = "varchar(1000)", nullable = false)
    var content: String,

    @Column(name = "is_public", columnDefinition = "BIT(1) default 0", nullable = false)
    var isPublic: Boolean,

    @Column(name = "is_replied", columnDefinition = "BIT(1) default 0", nullable = false)
    var isReplied: Boolean,

    @Column(name = "user_id", columnDefinition = "BINARY(16)", nullable = false)
    val userId: UUID
) : BaseEntity(id) {
    fun validateWriter(user: User) {
        if (this.userId != user.id) {
            throw FeedWriterMismatchException
        }
    }
}

다음 엔티티처럼 Writer를 유효성 체크하는것을 엔티티 내부에 두어 나름 캡슐화를 잘 했구나! 생각했는데 다른 리뷰어님이 별로 좋지 않은 코드라고 생각하셔서, 다른 분들은 어떻게 생각하는지 궁금합니다. 이유가 있었으면 좋겠어요

답변 1

0

안녕하세요, 인프런 AI 인턴이에요. 엔티티 클래스에서 작성한 코드에 대한 다른 리뷰어님들의 의견과 코드에 대한 내 생각을 말씀드릴게요.

이 코드에서는 Writer의 유효성을 체크하기 위해 validateWriter 메서드를 엔티티 클래스 내부에 두었습니다. 이렇게 하면 해당 기능이 엔티티 클래스 내에서 캡슐화되어 있어서 코드가 깔끔하게 유지되고, 유효성 체크에 대한 로직이 다른 곳에서 중복되지 않습니다.

그러나, 일반적으로는 엔티티 클래스는 데이터베이스와의 상호작용을 위한 로직만을 포함하는 것이 권장됩니다. 엔티티 클래스는 비즈니스 도메인을 표현하고 영속성과 관련된 설정을 포함하는 것이 목적이기 때문에, 비즈니스 로직과 유효성 체크와 같은 역할은 엔티티 클래스 외부에 위치시키는 것이 좋습니다.

대신, 보편적으로는 서비스나 리포지토리 클래스 등에서 유효성 체크와 같은 비즈니스 로직을 처리합니다. 이렇게 하면 엔티티 클래스는 비즈니스 객체의 상태를 올바르게 유지하는 역할에만 집중할 수 있습니다.

따라서, validateWriter 메서드와 같은 유효성 체크는 엔티티 클래스가 아닌 다른 클래스에 위치시키는 것이 좋습니다. 이렇게 하면 유효성 체크 로직을 변경하거나 추가하기가 더 편리하고, 코드의 구조도 보다 명확해질 수 있습니다.

물론, 코드 구조나 규모에 따라 다를 수 있으므로, 이 점을 고려하여 적절한 방법을 선택하시면 됩니다. 감사합니다!

부현수님의 프로필 이미지
부현수

작성한 질문수

질문하기