1.Static
처음에 클래스를 설명할 때 너무 틀이라는 비유에 얽매이면 안된다고 했던게 Static 때문이다.
static은 변수와 메소드에 사용 할 수 있는데
변수의 경우에는 같은 클래스를 이용하여 객체화 한 여러 객체들이 이 static 변수를 공유해서 사용이 가능하다.
이 static 변수는 heap 영역이 아닌 class 영역에 별도로 저장되어 공유하며 사용된다.
static은 따로 객체화하지 않고 클래스명.메서드명();와 같이 객체화없이 사용이 가능하다.
static 메소드 역시 클래스 영역에 저장된다.
사실 객체화하고 객체를 통해서 static 메소드를 호출하는것은 옳지 않다. 많이 하는 실수로 eclipse에서 자체적으로 허용해준다.
초기화는 값을 지정해줘도 되고 따로 static { } 블록을 생성해서 초기화 하여도 된다.
아래의 예제를 통해 이해해보자.
static 메소드
package chap04.exam07.sMember; public class Sub { static int sField = 134; static int plus(int a, int b) { return a + b; } static int minus(int a, int b) { return a - b; } int multi(int a, int b) { return a * b; } }
package chap04.exam07.sMember; public class Main { public static void main(String[] args) { Sub cal = new Sub(); System.out.println(cal.multi(3, 4) + " : 일반적인 객체화와 메서드 호출 방법을 이용"); System.out.println(Sub.plus(3, 4) + " : Static의 특징인 생성 없이 메서드 사용."); // cal.plus(3, 4); 와 같이 static 메서드를 객체로 생성해서 호출하는건 옳지 않음 // 저장되는 영역이 다르기 때문, static 영역은 클래스가 있는 영역이다. // 객체에서는 이 영역에 접근할 수 없으므로 클래스에서 접근하는 것이 옳다. // 이는 원본에 따로 표시한 내용을 복사본에서 볼 수 없는 것과 같다... System.out.println("객체 생성 후 접근 : " + cal.sField + ", " + "클래스 접근 : " + Sub.sField); // 일반적으로 프로그래머들이 많이 하는 실수이기 때문에 틀리더라도 // eclipse 자체에서 객체 생성 후 접근이 가능하게 지원을 해 주지만 밑줄을 그음. } }
static 변수
package chap04.exam08.sBlock; public class Monitor { static String company = "LG"; static String model = "Wide Curved Monitor"; static int price; // static은 객체화가 불가능 하므로 잘 사용은 안하지만 // static block으로 초기해도 되고 값을 바로 지정해도 된다. static { System.out.println(price); System.out.println("price 초기화"); price = 154000; } }
package chap04.exam08.sBlock; public class Main { public static void main(String[] args) { System.out.println("Monitor 속성 호출"); System.out.println("제조사 : " + Monitor.company); System.out.println("모델 : " + Monitor.model); System.out.println("가격 : " + Monitor.price); } }
'개념 및 코딩 > 04.클래스' 카테고리의 다른 글
[JAVA]04-04.접근제한자 private, Final 상수 (0) | 2018.08.24 |
---|---|
[JAVA]04-02.생성자, 오버로드 (0) | 2018.08.24 |
[JAVA]04-01.클래스, 객체 지향 프로그래밍, 접근제한자, 클래스 다이어그램 (0) | 2018.08.23 |