f1v3-dev/oop

유틸리티 클래스는 객체지향이 아닌 이유는?

Opened this issue · 1 comments

유틸리티 클래스를 보자면,

public class NumberUtils {

    private NumberUtils() {
        throw new UnsupportedOperationException("Utility class");
    }


    public static String formatWithCommas(int number) {
        // 숫자를 천 단위로 쉼표를 찍어주는 메서드
    }
}

위와 같이 static method를 통해 접근만 가능하다. 또한 생성자를 private 접근 제어자를 통해 인스턴스화를 막아두었다.

  • 단순하게 공통적으로 사용되는 메서드를 한 곳에 모아 재사용성을 높인것
  • 해당 유틸리티 클래스를 사용하는 클래스와 강한 결합도를 갖추게 된다.

인스턴스화를 막기 때문에 객체지향이 될 수 없는 것 같다. 오히려 절차지향에 가깝다고 할 수 있을 것 같다.
객체지향이 되기 위해서는 다른 객체와 협력 관계에서 메시지를 주고 받아야 하는데 유틸리티 클래스는 '객체'가 아님

읽어보자

객체가 식별 가능하다는 것은 구별할 수 있는 특정한 프로퍼티, 식별자가 객체 안에 존재한다는 것이라고 한다.

여기서 식별자는 new 키워드를 통해 만들어진 인스턴스가 가지는 Heap 영역 메모리 주소라고 봐도 무방한가?