아직 디자인패턴에 대해 자세히 공부를 안하고 있어서 Singletone pattern은 논외로 하고 작성하겠습니다.
위의 소스는 누구나가 언제든지 접근할 수 있는 Color type의 참조변수 WHITE를 생성하는것입니다.
더이상 이 WHITE 변수는 다른 Color type의 인스턴스를 참조할 수 없기때문에
언제든지 WHITE를 작성하면 매개변수가 255, 255, 255 인 인스턴스를 사용할 수 있는 것으로 보입니다.
여기엔 하나의 치명적일 수 있는 약점이 있습니다.
바로 인스턴스 필드값 자체가 바뀌는 가능성이 있다면 WHITE는 더이상
개발자, 사용자가 원하는 WHITE가 아닐 수 있다는 것입니다.
필드값 자체가 바뀔 가능성은 어떤 때에 있을까요??
(밑의 클래스는 예제를 위한 예제로 봐주시고 이해해주시길 바랍니다. ㅎㅎ)
class Color{
private int red;
private int green;
private int blue;
public Color(red, green, blue){
위의 소스는 누구나가 언제든지 접근할 수 있는 Color type의 참조변수 WHITE를 생성하는것입니다.
더이상 이 WHITE 변수는 다른 Color type의 인스턴스를 참조할 수 없기때문에
언제든지 WHITE를 작성하면 매개변수가 255, 255, 255 인 인스턴스를 사용할 수 있는 것으로 보입니다.
여기엔 하나의 치명적일 수 있는 약점이 있습니다.
바로 인스턴스 필드값 자체가 바뀌는 가능성이 있다면 WHITE는 더이상
개발자, 사용자가 원하는 WHITE가 아닐 수 있다는 것입니다.
필드값 자체가 바뀔 가능성은 어떤 때에 있을까요??
(밑의 클래스는 예제를 위한 예제로 봐주시고 이해해주시길 바랍니다. ㅎㅎ)
class Color{
private int red;
private int green;
private int blue;
public Color(red, green, blue){
this.red = red;
this.green = green;
this.blue = blue;
}
//getter, setter, toString....
}
위와 같은 클래스가 있다면 실상
toString 메소드를 이용하여 클래스 필드들을 모두 출력한다면 //WHITE.toString();
Color [red=255, green=255, blue=255]
가 출력되겠지만
Color a = WHITE;
a.setRed(1);
라는 소스가 있다면
Color [red=1, green=255, blue=255]
으로 출력이 가능해집니다.
결국 참조변수를 final로서 상수처럼 쓰고자 선언을 할 때에는 이 final 참조변수는 어디에도 대입되지 않도록
주의를 해야겠습니다.
특히나 이러한 final 참조변수가 static일 경우에는 더욱더 조심해야겠죠.
(사실 변수선언부터 깊이 있게 고민을 해야겠습니다. 공부하면 공부할수록 설계는 참 힘든 일이구나 합니다 ㅎ)
this.green = green;
this.blue = blue;
}
//getter, setter, toString....
}
위와 같은 클래스가 있다면 실상
toString 메소드를 이용하여 클래스 필드들을 모두 출력한다면 //WHITE.toString();
Color [red=255, green=255, blue=255]
가 출력되겠지만
Color a = WHITE;
a.setRed(1);
라는 소스가 있다면
Color [red=1, green=255, blue=255]
으로 출력이 가능해집니다.
결국 참조변수를 final로서 상수처럼 쓰고자 선언을 할 때에는 이 final 참조변수는 어디에도 대입되지 않도록
주의를 해야겠습니다.
특히나 이러한 final 참조변수가 static일 경우에는 더욱더 조심해야겠죠.
(사실 변수선언부터 깊이 있게 고민을 해야겠습니다. 공부하면 공부할수록 설계는 참 힘든 일이구나 합니다 ㅎ)
'Programming > JAVA' 카테고리의 다른 글
java : 배열은 참조변수! (0) | 2011.04.27 |
---|---|
java : 대체 객체가 뭐죠? instance 가 뭡니까? (0) | 2011.04.24 |
java : method의 참조형 매개변수에 대해 쉽게할 수 있는 오해. (2) | 2011.04.12 |
java : System.out.println(); (2) | 2011.04.04 |
java : 문자열을 int형으로 형변환할때 주의점(parseInt, valueOf) (0) | 2011.03.31 |