기본적으로 자바의 class는 생성자를 통해 인스턴스를 생성하고, 생성된 인스턴스는 heap 메모리에 올라간다.
그런데 자바에 있는 Math 클래스는 단순히 계산 용도로 사용하라고 만들어둔 클래스이기 때문에, Math 클래스의 메서드는 인스턴스를 생성할 필요없이 Math.메서드이름()
으로 호출하면 된다.
굳이 인스턴스를 생성해 메모리를 낭비할 필요가 없다는 것이다!
그럼 메모리 낭비를 막기 위해 인스턴스 생성을 막는 방법이 있을까?
그것은 바로 생성자의 접근 제한자를 private으로 사용하는 것이다.
생성자를 private으로 사용하면, 외부에서 인스턴스를 생성할 수 없다.
위의 사진을 보면 Math클래스도 생성자가 private으로 돼있다.
public class MyMath{
// 자동생성 - 기본생성자는 생성자가 없을 경우 컴파일할 때 자동으로 생성된다.
private MyMath(){
// 생성자에서 접근자를 private으로 선언하면, 인스턴스를 생성하지 못함.
}
public static double abs(int value){
if(value < 0) return value * -1;
else return value;
}
}
위와 같이 MyMath의 생성자를 private으로 해주었다.
MyMath클래스의 인스턴스를 생성하려했더니 빨간줄이 뜬다.
즉, 자바 컴파일러가 잡아주는 것이다.