
자바 기본 문법 – 클래스와 객체 – 4 – 정적 멤버 (static 키워드)
소제목 1: 정적 멤버란 무엇인가요? (What is a static member?)
정적 멤버(static member)는 자바 클래스에서 사용되는 특별한 종류의 멤버입니다. 클래스의 모든 객체가 공유하는 변수와 메서드를 의미합니다. 정적 멤버는 static 키워드를 사용하여 선언하며, 클래스의 인스턴스 생성 없이도 접근할 수 있습니다.
정적 멤버는 해당 클래스의 모든 객체가 동일한 값을 공유하게 되어, 객체 간에 데이터를 공유하거나 공통된 동작을 수행하는 데 유용합니다. 또한, 정적 멤버는 객체의 생성 없이도 클래스 이름으로 직접 호출할 수 있으므로, 편리한 접근성을 제공합니다.
소제목 2: 정적 변수 (Static Variables)
정적 변수(static variables)는 클래스 수준에서 선언되며, 모든 객체에 의해 공유됩니다. 클래스 내의 모든 인스턴스가 동일한 정적 변수를 사용하게 됩니다.
public class MyClass {
static int count; // 정적 변수 선언
public void increment() {
count++; // 정적 변수 사용
}
}
예를 들어, 위의 MyClass 클래스에서 정적 변수인 count는 객체의 생성 여부에 관계없이 모든 인스턴스에서 공유됩니다. 따라서 객체를 생성하거나 메서드를 호출할 때마다 count 값을 증가시킬 수 있습니다.
정적 변수는 객체 간에 데이터를 공유하거나 객체 수에 따라 변하는 값을 유지하는 데 유용합니다. 이를 통해 객체 간의 상호 작용을 쉽게 할 수 있으며, 데이터의 일관성을 유지할 수 있습니다.
소제목 3: 정적 메서드 (Static Methods)
정적 메서드(static methods)는 객체 인스턴스의 생성 없이 호출할 수 있는 메서드입니다. 정적 메서드는 클래스 수준에서 선언되며, 객체의 상태에 독립적인 동작을 수행합니다.
public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}
위의 예시에서 MathUtils 클래스의 add() 메서드는 인스턴스 생성 없이도 MathUtils.add(3, 5)와 같이 호출할 수 있습니다. 정적 메서드는 주로 유틸리티 메서드나 공통 기능을 제공하는 데 사용됩니다.
정적 메서드는 인스턴스 변수에 접근할 수 없으며, 오직 정적 멤버만 사용할 수 있습니다. 이는 정적 메서드가 특정 객체 인스턴스와는 관련이 없는 작업을 수행하기 때문입니다.
소제목 4: 정적 블록 (Static Blocks)
정적 블록(static blocks)은 클래스가 처음으로 로드될 때 실행되는 블록입니다. 정적 블록은 클래스 수준에서 선언되며, 클래스의 초기화 과정에서 사용될 수 있습니다.
public class MyClass {
static {
System.out.println("Static block executed.");
}
}
위의 예시에서 MyClass 클래스의 정적 블록은 클래스가 로드될 때 “Static block executed.”라는 메시지를 출력합니다. 정적 블록은 클래스의 정적 변수 초기화나 기타 초기화 작업에 활용됩니다.
소제목 5: 주의해야 할 점 (Points to Note)
-
정적 멤버는 객체의 생성 없이도 접근할 수 있기 때문에, 클래스 이름을 통해 접근하는 것이 좋습니다. 예를 들어,
MyClass.count
와 같이 접근하는 것이 권장됩니다. -
정적 변수를 과도하게 사용하면 메모리 사용량이 늘어날 수 있으므로, 적절하게 사용해야 합니다. 공유할 필요가 없는 데이터는 인스턴스 변수로 선언하는 것이 좋습니다.
-
정적 메서드는 인스턴스 변수에 접근할 수 없으며, 객체의 상태에 영향을 주지 않는 동작을 수행해야 합니다. 따라서 정적 메서드 내에서는 정적 변수와 다른 정적 멤버만 사용해야 합니다.
-
정적 블록은 클래스가 로드될 때 실행되므로, 클래스 초기화에 필요한 작업을 수행하는 데 사용될 수 있습니다. 그러나 정적 블록 내에서는 예외를 던질 수 없으므로 예외 처리에 주의해야 합니다.
-
정적 멤버는 상속에 영향을 받지 않습니다. 즉, 하위 클래스에서 동일한 이름의 정적 멤버를 재정의해도 상위 클래스의 정적 멤버는 가려지지 않습니다.
자바에서의 정적 멤버는 객체 간 데이터 공유와 공통 동작을 위한 강력한 도구입니다. 적절하게 사용하면 객체 지향 프로그래밍의 효과를 극대화할 수 있습니다. 정적 멤버에 대한 이해와 사용법을 숙지하면 자바 프로그래밍에서 더욱 효율적이고 확장 가능한 코드를 작성할 수 있습니다.
이상으로 자바의 정적 멤버에 대해 알아보았습니다. 다음 포스트에서는 다른 자바의 기본 문법에 대해 알아보도록 하겠습니다.
감사합니다!