오늘은 static 클래스에 대해 정리해보고자 한다. static 클래스는 주로 Java와 C# 같은 객체지향 언어에서 특정한 용도로 자주 사용된다. 다른 클래스나 인스턴스에 의존하지 않고 독립적으로 동작해야 하는 유틸리티성 메서드나 상수 등을 포함할 때 유용하다.
static 클래스는 인스턴스를 생성하지 않고도 사용할 수 있는 클래스이다. 클래스와 클래스 내 메서드, 변수에 static
키워드를 붙이면 해당 클래스와 멤버들은 객체 생성 없이도 접근할 수 있다. 주로 정적 유틸리티 메서드나 상수를 정의할 때 사용되며, 애플리케이션 전역에서 일정한 값을 유지하거나 반복적인 계산을 수행하는 데 적합하다.
Java에서는 일반 클래스가 아닌 내부 클래스에 static
키워드를 붙여 독립적인 클래스로 사용할 수 있다.
- Java의
Math
클래스:Math
클래스는 객체 생성 없이Math.pow()
와 같은 메서드를 바로 사용할 수 있다.Math
클래스는 내부 메서드가 모두 static으로 선언되어 있기 때문에 인스턴스를 생성하지 않고도 언제나 일정한 동작을 수행한다.
- 메모리 효율성: static 멤버는 클래스당 하나만 메모리에 생성되므로 인스턴스마다 메모리를 할당할 필요가 없다. 이를 통해 메모리 사용을 줄일 수 있다.
- 간편한 접근성: 객체를 생성하지 않고 클래스 이름을 통해 직접 접근할 수 있으므로, 코드가 간결해지고 유틸리티 메서드나 상수 사용이 편리해진다.
- 전역적으로 일정한 값 유지: static 변수는 애플리케이션의 모든 인스턴스에서 동일한 값을 참조하므로, 설정 값이나 상태를 전역적으로 공유할 때 유용하다.
- 테스트 어려움: static 멤버는 전역 상태로 존재하므로, 의존성 주입을 통한 테스트가 어렵다. static 메서드는 상태를 변경하지 않는 순수 함수로 유지하는 것이 좋다.
- 메모리 누수 가능성: static 변수는 애플리케이션이 종료될 때까지 메모리에 남아 있으므로, 메모리 누수로 이어질 수 있다. 이를 방지하기 위해 필요 이상으로 static 변수를 사용하지 않는 것이 중요하다.
- 객체지향적이지 않음: static 클래스는 객체 지향의 기본 원칙인 캡슐화와 다형성을 위반할 수 있다. 모든 메서드가 공통된 동작을 수행해야 하므로, 다형성을 활용해야 할 상황에서는 적합하지 않다.
static 클래스는 독립적인 유틸리티 메서드나 전역 상수를 정의할 때 유용하며, 메모리 효율성과 간편한 접근성 측면에서 강력한 도구가 된다. 하지만 전역 상태 관리의 어려움과 객체지향적 설계에서 제한이 있을 수 있다는 점을 고려하여 신중하게 사용하는 것이 중요하다. static 클래스의 장단점을 이해하고 적절한 상황에서 활용함으로써 코드의 유지보수성과 효율성을 높일 수 있다.