귀찮은데 그냥 상수도 인터페이스로 넣어서 쓰면 안되나?
아니면 implements로 상수를 전부 가져와서 이름만으로 써도 되지 않을까?
아래의 예시가 왜 쓰면 안되는지 도움이 될 것 같다. 우선 클래스 안에 있는 상수들을 보자.
public class ClassCons {
public static final double CONS = 0.0;
public static final String CONS1 = "22";
public static final int CONS2 = 1;
}
이제 이것들을 인터페이스 상수로 바꿔보자.
interface InterCons {
double CONS = 0.0;
String CONS1 = "22";
int CONS2 = 1;
}
인터페이스는 어짜피 public이다. 그러니 public이 필요없다. 바뀌지 않을 것이니 final도 필요없다.마치 짧아진 코드를 보며 내가 뭔가 해낸(?)사람 처럼 느낄 수도 있지만 아님을 바로 깨달을 수 있다.
public class BadIdea implements InterCons{
public BadIdea() {
System.out.println(CONS);
System.out.println(CONS1);
System.out.println(CONS2);
}
public static void main(String[] args) {
BadIdea badIdea = new BadIdea();
}
}
이 내용은 위에서 만든 인터페이스 상수를 가져온 것이다. 과연 이렇게 하면 잘 될까?
0.0
22
1
예상한 대로 나왔다. 하지만 이렇게 한다면?
public class BadIdea implements InterCons{
private int CONS = 100;
public BadIdea() {
System.out.println(CONS);
System.out.println(CONS1);
System.out.println(CONS2);
}
public static void main(String[] args) {
BadIdea badIdea = new BadIdea();
}
}
다시 실행해보자.
100
22
1
값이 바뀌어 있다. 이 말은 인터페이스 상수를 가져오는 순간 해당 클래스와 그 서브 클래스들이 상수들로 더러워(?)진다는 것을 말한다. 자칫하면 값들이 꼬일 수 있다. 에러도 잘 보이지 않을 거고 디버깅에도 애를 먹을 수도 있겠다.
댓글 없음:
댓글 쓰기