이펙티브 자바4

참치돌고래·2021년 8월 31일
0

이펙티브 자바

목록 보기
4/21

private 생성자로 noninstantiability를 강제하기

static 메서드와 static 필드를 모아둔 클래스를 만들경우 클래스를 abstract으로 만들어도 인스턴스를 만드는 것을 막을 수 없다.
(상속으로 인스턴스 생성 가능)

private 생성자로 해결하자.

public abstract class UtilityClass{
	private UtilityClass(){
    		throw new AssertionError();
    }
    public static String getName(){
    	return "Something";
    }
}
	

AssertionError로 생성자 호출시 에러를 발생시킬 수 있고, private생성자로 상속도 막을 수 있다.

생성자를 막지 않았을 때

public abstract class UtilityClass{
	
    static class AnotherClass extends UtilClass{
    
    }
    public static String getName(){
    	return "Something";
    }
    
    public static void main(String[] args){
    	AnotherClass antoherClass = new AnthorClass();
        anotherClass.getName() // -> 생성된 인스턴스를 통해 메소드 사용 불가능 
    }
}

현실적으로 abstract정도만 사용하여도 괜찮다.

profile
안녕하세요

0개의 댓글