처음 Java에 대해 배울 때 코드에서 자주 볼 수 있는 단어는 바로 Static이다. Java에서의 static이라는 키워드를 사용해서 정적 필드와, 정적 메서드를 만들 수 있다. 이 둘을 합쳐 클래스 멤버라고 표현된다. 이렇게 생성된 클래스 멤버는 클래스에 고정된다. 이번 포스팅에서는 '정적'이라는 뜻을 가지고 있는 Static의 사용을 지양해야 하는 이유에 대해 알아보도록 하겠습니다.
Static 사용이 메모리의 미치는 영향
Static으로 생성된 정적 멤버는 프로그램의 실행됨과 동시에 메모리에 올라간다. 이러한 이유로 인해 사용되지 않음에도 불구하고 메모리를 차지하고 있기 때문에 불필요한 자원이 낭비되고 있는 셈이다. 또한 Static을 사용해 만들어진 변수와 클래스는 앞에 '전역'이라는 의미가 붙고, 프로그램 내에서 어디에서든 사용될 수 있다. 이러한 특징이 전체적으로 어떤 문제를 야기하는지 알아보도록 하겠습니다.
메모리에 불필요하게 존재한다.
위에서 말했듯이 Static은 프로그램의 실행과 동시에 메모리에 올라가고, 프로그램 종료시점까지 차지하고 있는 메모리를 유지한다. 이러한 이유로 인해 메모리 부족을 야기할 수 있다. 또한 Static으로 생성된 클래스 멤버는 별도의 Static영역에 할당된다. 또 다른 영역인 heap 영역과 다르게 Static 영역에 할당된 메모리는 모든 객체가 공유하여 어디서든 참조할 수 있다는 장점이 있지만, 이러한 장점은 객체 지향 언어인 Java에서는 어울리지 않는다.
정적 메서드 내에서 인스턴스 변수 사용이 불가하다.
객체를 생성해야만 사용할 수 있는 인스턴스 변수이지만, 프로그램의 생성과 동시에 메모리를 차지하는 정적 메서드 내에서는 인스턴스 변수를 사용할 수 없다.
테스트가 어렵다.
전역적으로 관리되는 static 영역은 프로그램 전체에서 접근 및 변경이 가능하기 때문에 문제 발생 시 원인을 찾는데 어려움이 발생한다.
'Languages > Java' 카테고리의 다른 글
[Java]Stream 살펴보기_(2)Filter를 사용한 데이터 추출하기 (2) | 2023.06.24 |
---|---|
[Java]다형성을 지원하는 방법 오버로딩과 오버라이딩 개념 잡기 (2) | 2023.06.24 |
[Java]일반적인 for문과 이후의 등장한 향상된 for문 알아보기 (2) | 2023.06.06 |
[Java]문자열 내 특정 문자 포함 여부 확인 및 위치 찾기(contains, indexOf) (3) | 2023.05.07 |
[Java]배열을 원하는 크기대로 분할하는 방법(Guava : 구글 오픈소스 라이브러리) (2) | 2023.05.06 |