티스토리 뷰
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의 장점이 분명히 있고 실제로도 많이 사용되는 키워드 이기 때문에
한번쯤 왜 써야 하는지 생각해 보고 활용하는 것이 좋을 것 같아서 정리해 봤습니다.
'프로그래밍 > Java' 카테고리의 다른 글
이클립스(Eclipse) 개발환경을 UTF-8로 설정하기 (1) | 2012.07.30 |
---|---|
Java에서 표준시(Global Time)와 지방시(Local time)를 상호 변경하는 함수 (0) | 2012.07.18 |
java에서 날짜 형식 변경을 위한 SimpleDateFormat에 대한 간략한 정리~ (4) | 2012.07.11 |
jsoup을 활용해서 Java에서 HTML 파싱하는 방법 정리 (1) | 2012.05.31 |
Proxy를 이용한 HTML 소스 가져오기 (0) | 2012.05.24 |