현제의 현재이야기

[JAVA] JAVA Static과 Python global과의 차이점 본문

JAVA

[JAVA] JAVA Static과 Python global과의 차이점

현재의 현제 2023. 3. 10. 16:35

코드 출처: 점프 투 자바

class Counter  {
    static int count = 0;
    Counter() {
        count++;  // count는 더이상 객체변수가 아니므로 this를 제거하는 것이 좋다.
        System.out.println(count);  // this 제거
    }
}

public class Sample {
    public static void main(String[] args) {
        Counter c1 = new Counter();
        Counter c2 = new Counter();
    }
}

자바 공부를 하다가 static이라는 개념이 나오길래 생소해서 찾아봄

자바의 static 변수와 파이썬의 전역변수는 비슷한 개념이지만 몇 가지 차이점이 있다.
자바에서 static 변수는 해당 클래스에 속한 모든 객체가 공유하는 변수이다. 이는 파이썬의 전역변수와 비슷하다. 즉, 한 번 초기화하면 클래스 내 모든 인스턴스에서 동일한 값을 갖게 된다. 또한, static 변수는 클래스 이름으로 직접 접근할 수 있다.(객체로 접근하지 않아도 된다.)
반면에, 파이썬에서의 전역변수는 모듈 전체에서 공유되는 변수이다. 이 변수는 해당 모듈이 임포트될 때 초기화된다. 파이썬에서는 전역변수를 선언하지 않고 사용할 수 있으며 이 경우 해당 변수는 자동으로 전역변수로 간주된다. 또한, 전역변수는 모듈 이름으로 직접 접근할 수 있다.

즉, 위 코드를 실행하면

1
2

가 되는데, 이유는 서로 다른 Counter 객체 c1, c2가 선언되었어도 생성자 Count()에서 불러온 count는 static 변수이기 때문에 다른 객체 사이에서도 공유가 된다. 하지만 파이썬의 전역변수는 한 클래스 내의 개념이라기 보다는 모듈 전체(.py)에서 공유되기 때문에 비슷한 개념이지만 더 큰 범위이다.

'JAVA' 카테고리의 다른 글

[spring] FetchType에 대하여  (0) 2023.04.13
[Spring] null 값 처리와 HTTP response  (0) 2023.04.07
[JAVA SPRING] 0314 TIL  (0) 2023.03.14
기초문법 1일차  (0) 2023.03.08
JAVA 기본 문법 저장용  (0) 2022.07.22
Comments