Compare
public class HousePark { String lastname = "Park"; public static void main(String[] args) { HousePark pey = new HousePark(); HousePark pes = new HousePark(); } }
public class HousePark { static String lastname = "Park"; public static void main(String[] args) { HousePark pey = new HousePark(); HousePark pes = new HousePark(); }
위와 같이 lastname
변수에 static 키워드를 붙이면 자바는 메모리 할당을 딱 한번만 하게 되어 메모리 사용에 이점을 볼 수 있게된다.
Compare
Example 1 : Code
public class Counter { int count = 0; Counter() { this.count++; System.out.println(this.count); } public static void main(String[] args) { Counter c1 = new Counter(); Counter c2 = new Counter(); } }
Example 1 : Result
1 1
Example 2 : Code
public class Counter { static int count = 0; Counter() { this.count++; System.out.println(this.count); } public static void main(String[] args) { Counter c1 = new Counter(); Counter c2 = new Counter(); } }
Example 2 : Result
1 2
Example 1
c1, c2 객체 생성시 count 값을 1씩 증가하더라도 c1과 c2의 count는 서로 다른 메모리를 가리키고 있기 때문에 원하던 결과(카운트가 증가된)가 나오지 않는 것이다. 객체변수는 항상 독립적인 값을 갖기 때문에 당연한 결과이다.
Example 2
int count = 0
앞에 static 키워드를 붙였더니 count 값이 공유되어 다음과 같이 방문자수가 증가된 결과값이 나오게 되었다.
Example
public class Counter { static int count = 0; Counter() { this.count++; } public static int getCount() { return count; } public static void main(String[] args) { Counter c1 = new Counter(); Counter c2 = new Counter(); System.out.println(Counter.getCount()); } }
getCount()
라는 static 메소드가 추가되었다. main
에서 getCount()
는 Counter.getCount()
와 같이 클래스를 통해 호출할 수 있게 된다.