안녕하십니까 식사하셨는지요? 다름이 아니라 객체를 씀에있어 궁금한게있어서 이렇게 글을 올립니다
예를들어
WindowManager.LayoutParams 이 객체를 다루고자할때
1) WindowManager.LayoutParams.WRAP_CONTENT; // 그냥 가져다쓰는경우
2)WindowManager.LayoutParams param;
param.gravity; //정의해서 쓰는경우
2번의 경우가 파라메다수는 같은거같은데 다른것들 이 많이 추가됩니다 x,y,gravity등..
뭔가 자바에 관련이있는거같은데,,(LyoutParams는 스테틱클래스)
자바 기본기가 아직 미흡한거같습니다 ㅜㅜ
왜다른걸까요??
WindowManager.LayoutParams param; 와 같은 의미는 WindowManager.LayoutParams param = null; 이겠지요.
1번의 경우는 정의안해도 쓸 수 있는 static으로 된 변수나 메소드만 보이게 되는 것이고
2번의 경우는 실제로 객체를 만들지 않았지만 이클립스에서는 객체가 있다는 전제하에 static으로 시작안하는 메소드와 변수가 모두 보이게 되는 것입니다. 실제 2번처럼해서 x,y에 접근하면 객체가 null이기 때문에 오류날 것 이고요.
따라서 1번의 경우는 public static으로 시작하는 변수와 메소드가 보이고
2번의 경우는 public 으로 시작하는 모든 변수와 메소드가 보임
LayoutParams는 뷰의 설정에 대한 부분의 집합입니다.
설정을 위한 변수인 param.gravity
레이아웃이 뷰를 배치할 수 있게 정렬값을 설정하는것이구요
약속으로 정의된 값인 LayoutParams.WRAP_CONTENT 입니다.
이렇게 쓰죠 params.width = LayoutParams.WRAP_CONTENT;
내가 설정한 width가 WRAP_CONTENT 입니다.
두개 차이점을 아시겠나요?
WindowManager.LayoutParams.WRAP_CONTENT
이런 static 으로 선언된 상수는 정의된 값입니다.
가령 예를들어 어떤 세팅값이 0번:로딩중상태, 1번:로딩이 완료된상태 라면 코드를 쓸 때 0번과 1번이라고 해서 약속된 그대로 쓰게 된다면 이건 코드 가독성에 크게 영향을 미칩니다. 만약에 내가 아닌 사람이 코드를 볼때 0이 뭔지 1이 뭔지 어떻게 알겠습니까?
저렇게 WRAP_CONTENT를 상수로 정의해 놓지 않았다면 기억력이 한계가 있는 인간이기 때문에 매번 개발 문서등을 보고 WRAP_CONTENT에 해당하는 값이 뭔지 찾아봐야 할겁니다.
그래서 public static final int STATE_LOADING = 0; 이런식으로 사람이 알아 볼 수 있는 말로 정의를 해둔것이죠