ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 객체의 일관성에 관한 메모
    Dev. Diary/Memo 2023. 9. 19. 00:53

    Builder 패턴과 JavaBeans 패턴에 대해서 알아보다가, 한번에 이해가 되지 않는 문장이 있었다.

    JavaBeans 패턴은 객체가 완전히 생성되기 전까지는 일관성(consistency)이 무너진 상태에 놓이게 된다.

    관용적으로 자주 쓰이는 표현인지는 잘 모르겠지만, 그래도 간단하게 정리해두려고 한다. 먼저 책에 있는 JavaBeans 패턴의 예시를 보자.

    // Effective Java 코드 2-2
    public class NutritionFacts {
        private int servingSize = -1; // 필수
        private int servings = -1; // 필수
        private int calories = 0;
        private int fat = 0;
        private int sodium = 0;
        private int carbohyd = 0;
        
        public NutritionFacts() {}
    
        public void setServingSize(int servingSize) { this.servingSize = servingSize; }
        public void setServings(int servings) { this.servings = servings; }
        public void setCalories(int calories) { this.calories = calories; }
        public void setFat(int fat) { this.fat = fat; }
        public void setSodium(int sodium) { this.sodium = sodium; }
        public void setCarbohyd(int carbohyd) { this.carbohyd = carbohyd; }
    }

    기본적인 JavaBeans 패턴에서는 매개변수가 없는 기본 생성자가 있고, 객체를 생성할 때는 필드에 값을 미리 넣지 않고 객체를 생성한 뒤에 필드들을 각각의 메서드를 이용해서 초기화한다. 이것에서 '객체가 완전히 생성되기 전까지는'이라는 말은 필드에 값을 지정하는 메서드를 모두 사용하지 않은 상태를 말하는 것으로 보인다. 그러면 '일관성이 무너진 상태의 객체'라는 것은 객체의 모든 필드가 초기화되어있지 않은 상태를 포함하는 것으로 유추할 수 있다.

     

    그리고 추가적으로 위의 문장 바로 뒤에, '점층적 생성자 패턴(telescoping constructor pattern)에서는 매개변수들이 유효한지를 생성자에서만 확인하면 일관성을 유지할 수 있었는데, ...'라는 말이 나오는 것을 보면 객체의 필드들이 유효하게 초기화된 상태가 일관성이 유지되는 것이라고 볼 수 있을 것 같다.

     

    그 외에도, 일관성이 깨진 객체가 만들어지면 디버깅이 쉽지 않을 수 있다고 하는데, 아직은 그냥 좋지 않은 상황이 벌어질 것만 같다는 느낌만 온다. 경험적으로 얻을 수 있는 지식일 것 같네.

     

    아무튼 책 Effective Java를 읽다보니, 그냥 단순히 읽기만 하는 것이 좀 아쉽다. 간단한 CRUD 프로젝트를 하나 만들어서, 이렇게 알게된 것들을 적용해보면서 읽는 것이 좋아보인다. 이 부분(아이템 2 생성자에 매개변수가 많다면 빌더를 고려하라)을 읽으면서 DTO들을 강의나 참고 자료에서 알려주는대로 무심하게 만들었던 것이 떠올랐다. 오늘 알게된 것을 DTO나 다른 클래스에도 적용을 해야하는지는 다시 천천히 생각해봐야겠지만, 조만간에 꼭 간단한 프로젝트를 하나 만들자.

    댓글

Designed by Tistory.