티스토리 뷰

Java 프로그래밍을 하다보면 static 메소드나 static 변수가 자주 사용되는 것을 볼 수 있습니다. 

일반적으로 static 변수나 메소드를 사용할 때 적절한지 여부 보다는 계속 사용해 왔으니 하면서 습관적으로 쓰는 경향이 있는 것 같습니다. 

예를 들면, log4j를 활용한 Logger 변수를 선언하거나 

유틸리티 클래스를 만들어 사용할 때 메소드를 static으로 선언하는 경우가 종종 있습니다. 


Static 장단점


그런데 혹자들은 가능하면 static을 사용하지 않는 것이 좋다고도 합니다. 

예전의 함수 위주의 절차적 프로그래밍에서의 전역변수 처럼 static을 사용하면 프로그램의 오류가 양산될 수 있고, 디버깅 하기도 어렵기 때문이기도 합니다. 


static 변수를 선언할 경우, 프로그램 어디에서든지 객체를 생성하지 않고도 접근할 수가 있습니다. 

이럴 경우, 여기 저기에서 해당하는 변수 값 즉 상태를 변경하게 되면 프로그램이 꼬일 수 있다는 것이죠. 

그래서 자바에서 보면 static 변수에 final이라는 키워드가 붙어 있는 것을 볼 수 있습니다. 

즉, 상태 값을 변경할 수 없다는 것이죠. 


그래도 static을 사용하면 객체를 생성하지 않고 변수에 접근하거나 메소드를 실행할 수 있기 때문에 속도가 빠르다는 장점이 있습니다. 

이런 측면에서 static의 사용을 권장하는 경우도 상당히 많습니다. 

실제로 java의 내장 메소드들 중에도 Math 클래스와 같이 static으로 정의된 것도 꽤 많이 있습니다. 

static 메소드를 사용할 경우, static이 아닌 인스턴스 변수는 호출할 수 없다는 한계도 있습니다. 


Static 활용하기


종합하면 다음과 같은 상황들을 고려해서 static을 사용할지 여부를 결정하는 것이 바람직할 것 같습니다. 

1. 클래스 설계시 멤버 변수 중에 모든 인스턴스에서 공통으로 사용해야 하고 상태 값이 변경되지 않는 경우에는 static 변수를 사용한다. 

2. 클래스 설계시 메소드 중 내부의 인스턴스 변수를 사용하지 않는 것은 static 메소드를 사용한다. 


속도나 접근성 측면에서 static의 장점이 분명히 있고 실제로도 많이 사용되는 키워드 이기 때문에 

한번쯤 왜 써야 하는지 생각해 보고 활용하는 것이 좋을 것 같아서 정리해 봤습니다. 


댓글
댓글쓰기 폼