// Util이지만 생성자가 없음
public class ImageUtility {
private static String IMAGE_DATE_FORMAT = "yyyyMMddHHmm";
public static String makeImageFileNm(String imgFileNm) {
return imgFileNm + "_" + new SimpleDateFormat(IMAGE_DATE_FORMAT).format(new Date());
}
}
생성자를 명시하지 않으면 컴파일러가 자동으로 매개변수를 받지 않는 public 생성자를 만듬
이때 위 클래스를 사용하는 사용자는 이 생성자가 자동으로 생성된 것인지 구분할 수 없음!!
사용자 생각 : 기본 생성자를 호출해야 뭔가 검증기같은 것이 돌겠지? (이런 생각을 하는 사람은 없겠지만…)
// 다음과 같이 사용하기를 바랬으나,
ImageUtility.makeImageFileNm("test", ".png");
// 생성자를 생성해서 사용할 수도 있음
ImageUtility imageUtility = new ImageUtility();
String imageFileNm = imageUtility.makeImageFileNm("test", ".png");
의도치 않게 인스턴스화할 수 있게된 클래스들도 발생
// Util이지만 생성자가 없음
abstract class ImageUtility {
private static String IMAGE_DATE_FORMAT = "yyyyMMddHHmm";
public static String makeImageFileNm(String imgFileNm) {
return imgFileNm + "_" + new SimpleDateFormat(IMAGE_DATE_FORMAT).format(new Date());
}
}
public class ItemImageUtility extends ImageUtility {
// ...
}
// 추상클래스이기 때문에 생성자 생성 불가
// ImageUtility imageUtility = new ImageUtility();
// 상속받은 클래스에서 생성자 호출 가능
ItemImageUtility itemImageUtility = new ItemImageUtility();
public class ImageUtility {
// 기본 생성자가 만들어지는 것을 방어(인스턴스화 방지용)
private ImageUtility(){
throw new AssertionError();
}
}
private
생성자이므로 클래스 외부에서는 접근할 수 없으며, 내부에서 실수로 생성자를 호출하는 경우에 대응하기 위해 AssrtionError
예외처리를 했음.
private
선언으로 하위클래스가 상위 클래스의 생성자에 접근을 못해 상속이 불가능