본문 바로가기



프로그래밍/JAVA

[JAVA] static 변수에 관한 의문점

자바를 공부하다가 문득 static변수에 대해 의문이 생기기 시작했다. static인데 이걸 다른 클래스에서 접근해서 바꿀 수 있다는 것부터가 마음에 안들었다. 사실 못바꾸게 할려면 final로 선언하면되는문제인데. 왜 굳이 다른 클래스에서 해당 클래스의 static을 바꿀 수 있는 건지 이해가 되질 않는다. 그리고 드는 근본적인 의문 static은 일종의 "전역변수"에 해당하는데, 프로그래밍에 있어서 전역 변수는 함부로 사용하면 안된다는 무언의 철학이 공공연히 떠돈다. 이것은 fail-safe산업에서 특히 강조되는 부분이기도 한데. 자바에서는 static을 사용해도 특별한 코드 추가 없이 바로 다른 클래스에서 참조 클래스로 호출해서 변경 가능하다는게 충격적이였다. 실제 생성객체이름.클래스 변수 이름 해도 바꿀수 있는 점이 특히나 이해가 안간다. 클래스 변수를 변경할 수 있는게 유연성을 위해서라면 해당 클래스이름.클래스변수 이렇게 하도록 문법이 정의되어 있어야 할텐데.

JVM 메모리 영역에서 클래스 데이터 영역을 heap에 저장된 값이 접근해서 조작한다???? 워후  대체 이 기능이 왜  존재하는지 이해가 안가는데, 특히 문법상으로 위의 그림에서 보시다 싶이. 이걸 여기저기서 가져다가 쓰면서 변경가능하단 이야기인데 접근 제한자 사용 이전에 이런 단순한 문법이 있어서 더 헷갈리는것 같다. 뭔가 이유가 있을것 같은데 아직 배우는 단계라 궁금증만 난무할뿐.

그리고 또한가지가 더생겼는데,  static 메서드를 지정안하면 다른 메서드에서  해당 메서드를 호출할 수 가 없다. main 메서드 이전에 작성된 코드인데 해당 코드를 공유 안하면 내부 고정인듯?