Static

Dmitry Klokov·2021년 1월 11일
0

JAVA

목록 보기
8/13
post-thumbnail

Static variable


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 키워드를 붙이면 자바는 메모리 할당을 딱 한번만 하게 되어 메모리 사용에 이점을 볼 수 있게된다.

※ 만약 HousePark 클래스의 lastname값이 변경되지 않기를 바란다면 static 키워드 앞에 final이라는 키워드를 붙이면 된다. final 키워드는 한번 설정되면 그 값을 변경하지 못하게 하는 기능이 있다. 변경하려고 하면 예외가 발생한다.

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 값이 공유되어 다음과 같이 방문자수가 증가된 결과값이 나오게 되었다.

Static Method


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() 와 같이 클래스를 통해 호출할 수 있게 된다.

※ 스태틱 메소드 안에서는 인스턴스 변수 접근이 불가능 하다. 위 예에서 count는 static 변수이기 때문에 스태틱 메소드(static method)에서 접근이 가능한 것이다.
profile
Power Weekend

0개의 댓글