티스토리 뷰

Dev/Java

[Java] static 변수 이해하기

DWFOX DWFOX 2016.02.03 16:11



[Java] static 키워드 변수 이해하기


  static 

static는 변수나 메소드에 키워드로 사용한다.



  static 변수 사용하기 (1)

 public class SeoulCity{
    static String cityname = "서울";

    public static void main(String[] args) {
        SeoulCity city1 = new SeoulCity();
        SeoulCity city2 = new SeoulCity();
    }
}


위와 같이 SeoulCity 클래스의 cityname은 항상 서울이 될 것이다.

city1과 city2에 static을 선언하지 않는다면 city1의 cityname과 city2의 cityname이 메모리에 각각 할당되어 사용된다.


하지만 static을 사용한 변수는 메모리 할당이 한번으로 끝난다. 이렇게 되면 몇백개의 객체를 생성하게 되면 static이 없어 많은 메모리를 소비하게 된다


그렇지만 cityname을 city1, city2 각각 변경하여 사용하게 된다면 static을 사용하면 안된다. city1에서는 부산, city2에서는 대전으로 바꿔야 하는 일이 생긴다면 city1이든 city2든 바뀐값으로 사용되게 되므로 주의 해야 한다. 


그래서 해당 변수의 값을 변경하지 못하게 하는 final과 함께 사용하여 그 값을 변하지 못하게 하면 된다. final로 선언한 변수를 변경하려고 하면 예외가 발생하므로 주의 해야 한다.



  static 변수 사용하기 (2) 

 public class CounterShare {
	static int count = 0;
	
	 public static void main(String[] args) {
		 CounterShare counter1 = new CounterShare();
		 CounterShare counter2 = new CounterShare();
		 
		 counter1.count = 1;
		 System.out.println("counter1 = " + counter1.count);
		 
		 counter2.count++;
		 System.out.println("counter2 = " + counter2.count);
	
	}
}

위 코드를 실행시키면 출력값은 


counter1 = 1

counter2 = 2


와 같이 나오게 된다. 
CounterShare의 count 값은 개별 클래스 객체의 값을 유지 하는 것이 아니다. counter1과 counter2의 같은 count를 공유하게 되는 것이다. 




참고 : https://wikidocs.net/228


댓글