Java의 Static(정적변수)는 어떤 장점과 단점이 있을까?

2024. 6. 30. 11:55카테고리 없음

이번 리듬게임 (Rhythm Max) 프로젝트를 진행하면서, 화면이 8~9개 단위로 나뉘다보니

 

변수값을 넘겨줄때 Intent를 사용하여 Put,Get Extra로 넘겨주고 받는 방식을 사용하다.

 

static 변수로 정적변수로 선언을 해주면 따로 intent를 사용할 필요없이 코드가 매우 간결해지고 접근이 쉬워진다는걸 배웠다.

 

실제로 static변수의 사용은 매우 달콤한 경험을 선사해줬고. 어느새 게임의 변수는 7할 이상이 static이 붙어있었다.ㅋㅋㅋ

 

아름다운 static 향연을 보시라.

하지만 몇몇의 오픈소스 또는 Java책을 보면 static 사용을 되도록 지양하는 편 이다.

 

그래서 static을 사용하면서도 매우 편리하지만 꺼림칙한 느낌을 지울수가 없었는데. 

 

이번에 담당교수님의 강의에서 static의 단점을 제대로 알 수 있었다.

 

static 변수의 장점

1. 한번의 선언으로 모든 class에서 접근이 가능하다.

2. intent로 값을 넘겨주고 받을 필요가없다.

 

static 변수의 단점

1. 메모리를 많이 잡아먹는다. (앱이 종료되기 전까지 항상 존재하기 때문)

2. 여러 클래스에서 접근이 가능한만큼, 동기화를 신경써줘야함. (충돌이 날 수 있다)

3. 일반변수는 포인터값이 액티비티가 바뀔때마다 변하지만, 정적변수는 앱이 동작하는동안 바뀌지않는다. (이것이 제일문제)

 

3번의 최대 단점으로는 보안이슈 가 제일 크다고 본다. 포인터가 변하지않기 때문에 해커입장에서 변조되면 안되는값을 

static변수로 만들어두면. 이를 변조하기 쉬워질 수 있다.

 

 

이러한 이유로 static 변수는

 

1. 변조하면 위험한(패스워드 등의) 값은 암호화하여 저장한다.

2. protected or private을 사용해 외부클래스에서 직접참조 불가능하게 만들기.

3. 무엇보다 "메모리누수"가 발생한다는 치명적 단점을 초래할수 있으니, 정말 필요한 변수만 static으로 사용.