본문 바로가기
# Coding/Java

자바 static 키워드

by hxodoo.cookie 2023. 11. 24.

 

자바 언어는 다양한 기능과 특징을 제공하며, 그중에서도static 키워드는 중요한 역할을 합니다. 이번 글에서는 자바에서 static 키워드의 의미와 활용법, 그리고 효과적으로 활용하는 방법에 대해 알아보겠습니다.

 

 

 

 

 

 

static 키워드

static 키워드는 자바에서 클래스 멤버에 적용되며, 해당 멤버가 클래스에 속하도록 지정합니다. 클래스의 인스턴스가 아닌 클래스 자체에 연결되는 특성을 가지고 있어, 프로그램이 실행되는 동안 메모리에 단 한 번만 할당되고 초기화됩니다. 이로써 해당 멤버는 클래스의 모든 인스턴스에서 공유되며, 인스턴스의 생성 여부와 상관없이 접근할 수 있습니다.

 

 

 

static 변수

 

1. 상수 선언

 

static 변수는 클래스의 모든 인스턴스에서 공유되는 특징을 가지고 있습니다. 여러 인스턴스에서 동일한 값을 공유하고자 할 때 static 키워드를 활용하여 상수(변경되지 않는 값)를 선언하는 것은 효율적입니다. 예를 들어, 수학에서 자주 사용되는 π(파이) 값을 상수로 정의할 때 다음과 같이 사용할 수 있습니다.

 

 

public class MathConstants {
    public static final double PI = 3.141592653589793;
    // 다른 상수들도 여기에 추가 가능
}

 

 

:: 위의 예제에서 PI는 모든 인스턴스에서 동일한 값을 가지며, MathConstants.PI로 접근할 수 있습니다.  MathConstants.PI로 어디서든 접근하여 사용할 수 있으며, 값이 변하지 않기 때문에 안전하게 활용할 수 있습니다.

 

 

 

 

2. 공유 데이터

 

static 변수는 클래스의 모든 인스턴스에서 공유되기 때문에, 공유 데이터를 효과적으로 관리할 때 유용합니다. 예를 들어, 여러 인스턴스에서 공통으로 사용되는 설정이나 카운터를 static 변수로 선언하여 중복을 방지할 수 있습니다.

 

 

public class SharedData {
    public static int globalCounter = 0;
    // 다른 공유 변수들도 여기에 추가 가능
}

 

 

:: globalCounter는 모든 인스턴스가 공유하는 카운터로, 어디서든 접근하여 값을 증가시킬 수 있습니다.

 

 

 

 

3. 메모리 효율성

 

인스턴스 변수보다 static 변수는 메모리를 더 효율적으로 사용합니다. 모든 인스턴스가 동일한 값을 가지는 경우에는 각 인스턴스가 독립적으로 메모리를 소비하는 것은 낭비입니다. 이런 경우 static 변수를 사용하여 메모리를 절약할 수 있습니다.

 

 

 


static 메서드

 

1. 유틸리티 메서드

 

static 메서드는 특정 인스턴스에 속하지 않는 독립적인 작업을 수행할 때 유용합니다. 예를 들어, 수학 연산이나 문자열 조작과 같은 기능을 제공하는 유틸리티 클래스를 만들 때 static 메서드를 활용할 수 있습니다.

 

 

public class MathUtils {
    public static double square(double number) {
        return number * number;
    }
    // 다른 유틸리티 메서드들도 여기에 추가 가능
}

 

 

:: 이렇게 하면 MathUtils.square(5)와 같이 객체를 생성하지 않고도 메서드에 접근할 수 있습니다.

 

 

2. 팩토리 메서드

 

static 메서드는 팩토리 메서드로 사용되기도 합니다. 인스턴스를 생성하는 복잡한 로직이나 특수한 경우에 사용됩니다. 예를 들어, 다음과 같이 인스턴스를 생성하는 팩토리 메서드를 만들 수 있습니다.

 

 

public class CarFactory {
    public static Car createCar(String model) {
        // 모델에 따라 다른 Car 인스턴스를 생성하는 로직
    }
}

 

 

 

 


static 블록

 

static 블록은 클래스가 로드될 때 한 번만 실행되는 블록으로, 클래스 초기화에 사용됩니다. 주로 초기화 코드나 설정 로직을 작성할 때 활용됩니다.

 

 

public class AppConfig {
    static {
        // 초기화 코드
    }

    // 다른 멤버들
}

 

 

:: 이렇게 하면 클래스가 처음 사용될 때 초기화 코드가 실행되어 설정이나 리소스를 로드할 수 있습니다.

 

 

 


주의사항과 사용 시 유의점

 

▶ 상속과 static

static 멤버는 상속이 적용되지 않습니다. 즉, 자식 클래스에서 static 멤버를 재정의할 수 없고, 부모 클래스의 static 멤버를 사용할 때는 부모 클래스의 이름으로 직접 접근해야 합니다.

 

 

▶ static 남발 주의

static 키워드를 남발하면 객체지향 프로그래밍의 장점을 상쇄시킬 수 있습니다. 필요한 경우에만 사용하고, 공유되어야 하는 데이터나 독립적인 작업에만 사용하는 것이 좋습니다.

 

 

▶ 단위 테스트

static 멤버는 유닛 테스트에 어려움을 줄 수 있습니다. 인스턴스화 없이 직접 접근되는 static 멤버는 모의 객체(mock object)를 사용하기 어려울 수 있습니다. 따라서 static 멤버를 사용할 때는 테스트 가능한 코드를 작성하는 데 주의해야 합니다.

 

 

 

 


 

이번 글에서는 자바에서 static 키워드의 다양한 활용법에 대해 살펴보았습니다. static 변수, 메서드, 그리고 블록을 적절히 사용함으로써 코드의 가독성과 유지보수성을 높일 수 있습니다. 그러나 과도한 static 사용은 주의가 필요하며, 상황에 맞게 적절히 활용하는 것이 좋습니다.

'# Coding > Java' 카테고리의 다른 글

자바 패키지 데이터 은닉  (1) 2023.11.23
자바 응용 계산기 프로그램  (1) 2023.11.21
자바 람다식  (1) 2023.10.12
자바 인터페이스 추상클래스  (0) 2023.09.29
자바 내부클래스 익명클래스  (1) 2023.09.25