반응형
 

자바에서의 static: 개념과 활용 방법

자바(Java)에서 static 키워드는 클래스 멤버(변수, 메서드, 블록)에 적용되어 객체가 아닌 클래스 자체에 속하게 만듭니다. 이를 통해 메모리 효율성과 코드 재사용성을 높일 수 있습니다. 이 글에서는 static 키워드의 개념, 자바에서 다루는 방법, 그리고 다양한 활용 예시를 살펴보겠습니다.


static 키워드란?

static 키워드는 클래스 수준의 멤버를 정의할 때 사용됩니다. 일반적으로 클래스 멤버는 객체마다 개별적으로 생성되지만, static 멤버는 클래스에 하나만 존재하며 모든 객체가 공유합니다.

특징:
  1. 클래스에 속함: 객체가 아닌 클래스 자체에 속합니다.
  2. 공유: 모든 객체가 같은 static 멤버를 공유합니다.
  3. 객체 생성 없이 접근 가능: 클래스 이름을 통해 직접 접근할 수 있습니다.

static 변수

static 변수는 클래스 수준에서 하나만 생성되며, 모든 인스턴스가 공유합니다.

예제:
public class Counter {	
    static int count = 0; // static 변수

    public Counter() {
	    count++;
    }

    public static void displayCount() {
	    System.out.println("현재 객체 수: " + count);
    }
}

public class Main {
    public static void main(String[] args) {
        new Counter();
        new Counter();
        Counter.displayCount(); // 클래스 이름을 통해 접근
    }
}
출력 결과:
 
현재 객체 수: 2

static 메서드

static 메서드는 객체 없이 클래스 이름으로 호출할 수 있습니다. static 변수만 직접 접근할 수 있으며, 인스턴스 변수는 사용할 수 없습니다.

예제:
public class MathUtils {
    public static int add(int a, int b) {
	    return a + b;
	}

    public static int multiply(int a, int b) {
  		return a * b;
    }
}

public class Main {
    public static void main(String[] args) {
        int sum = MathUtils.add(5, 10); // static 메서드 호출
        int product = MathUtils.multiply(3, 4);

        System.out.println("합계: " + sum);
        System.out.println("곱셈: " + product);
    }
}
출력 결과:
 
합계: 15
곱셈: 12

static 블록

static 블록은 클래스가 로드될 때 한 번만 실행됩니다. 주로 static 변수의 초기화에 사용됩니다.

예제:
public class Config {
    static String appName;
    static int version;

    static {
        appName = "MyApplication";
        version = 1;
        System.out.println("Config 클래스가 로드되었습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println("앱 이름: " + Config.appName);
        System.out.println("버전: " + Config.version);
    }
}
출력 결과:
 
Config 클래스가 로드되었습니다.
앱 이름: MyApplication
버전: 1

static의 활용 예시

1. 싱글톤 패턴

싱글톤 패턴에서 static 키워드는 클래스의 인스턴스가 하나만 존재하도록 보장합니다.

public class Singleton {
    private static Singleton instance;

    private Singleton() {
    // private 생성자
    }

    public static Singleton getInstance() {
        if (instance == null) {
	        instance = new Singleton();
        }
        return instance;
    }
}
2. 유틸리티 클래스

static 메서드로 구성된 클래스는 반복적으로 사용되는 기능을 제공할 수 있습니다.

public class StringUtils {
    public static boolean isEmpty(String str) {
	    return str == null || str.isEmpty();
    }
}
3. 상수 정의

staticfinal을 함께 사용하여 상수를 정의할 수 있습니다.

public class Constants {
    public static final double PI = 3.14159;
    public static final String APP_NAME = "StaticApp";
}

public class Main {
    public static void main(String[] args) {
        System.out.println("PI: " + Constants.PI);
        System.out.println("앱 이름: " + Constants.APP_NAME);
    }
}
출력 결과:
 
PI: 3.14159
앱 이름: StaticApp

마치며

static 키워드는 클래스 수준에서 멤버를 정의하고 공유하는 데 유용합니다. 유틸리티 메서드, 상수 정의, 싱글톤 패턴 등 다양한 상황에서 활용될 수 있으며, 객체 지향 프로그래밍에서 메모리 사용과 코드 재사용성을 개선하는 데 중요한 역할을 합니다. static 키워드를 이해하고 적절히 활용하여 더 효율적인 자바 코드를 작성해보세요!

 
반응형

'SW > Java' 카테고리의 다른 글

[Java] 디자인 패턴  (0) 2025.01.04
[Java] 상속, 오버로딩, 오버라이딩  (1) 2025.01.03
[Java] 패키지 & 접근 제어자  (0) 2025.01.03
[Java] 생성자  (0) 2025.01.03
[Java] Class & Object (클래스 & 객체)  (0) 2025.01.03

+ Recent posts