반응형
목차
개요
본 포스팅은 카카오테크캠퍼스 백엔드 과정에 따른 공부를 기록하는 용도로 사용할 예정이다.
static 변수(클래스 변수)
정의
- 특정 클래스의 인스턴스(객체)에 속하지 않는 변수
특징
- static 변수는 클래스 레벨에서 정의되며, 해당 클래스의 모든 인스턴스들이 공유하는 변수입니다.
- 이 변수는 메모리에 한 번만 할당(정적 메모리)되며, 프로그램이 실행되는 동안 계속 유지된다.
- static 메서드에서는 인스턴스 변수를 직접 사용할 수 없다.
인스턴스 변수는 객체가 생성될 때 할당되는 변수로, 특정 객체에 연관되어 있는 반면 static 메서드는 클래스 레벨에서 정의되어 객체를 생성하지 않고 호출할 수 있는 메서드이기 때문이다.
따라서 static 메서드는 객체가 생성되지 않은 상태에서도 호출될 수 있기 때문에, 인스턴스 변수에 직접 접근할 수 없
예시)
class MyClass { int instanceVariable; static void staticMethod() { // 에러 발생: static 메서드에서 인스턴스 변수를 직접 사용할 수 없습니다. instanceVariable = 10; } }
그러나 static 메서드 내에서 인스턴스 변수를 사용하려면, 해당 클래스의 객체를 생성한 후 그 객체를 통해 인스턴스 변수에 접근할 수 있다.
class MyClass { int instanceVariable; static void staticMethod() { MyClass obj = new MyClass(); obj.instanceVariable = 10; } }
이 경우, staticMethod에서 MyClass 객체를 생성하고, 그 객체를 통해 instanceVariable에 접근하고 있다.
이 방식으로 인스턴스 변수를 사용할 수 있지만, 이렇게 사용된 인스턴스 변수는 해당 객체에만 국한된 값이 된다.
사용하는 이유
- 인스턴스 변수에 대한 메모리 사용을 줄이기 위해
일반적인 인스턴스 변수는 클래스의 각 인스턴스에 대해 새로운 메모리 공간을 차지하지만 static 변수는 클래스 당 하나의 메모리 공간만 사용하므로, 메모리 사용을 줄일 수 있다. - 모든 인스턴스에서 공유되는 값을 저장하기 위해
static 변수는 클래스의 모든 인스턴스에서 공유되므로, 특정 값을 모든 객체 간에 동일하게 유지하려는 경우에 유용다.
사용되는 경우(활용예시)
- 상수선언시
final 키워드와 함께 static 변수를 사용하여 프로그램 전체에서 사용되는 상수를 정의한다.
public class Constants {
public static final double PI = 3.14159;
}
- 클래스의 인스턴스 카운터
객체 생성 횟수를 추적하려는 경우, static 변수를 사용하여 인스턴스 생성 시마다 카운터를 증가시킬 수 있다.
class MyClass {
static int instanceCount = 0;
MyClass() {
instanceCount++;
}
}
Singleton pattern 싱글톤 패턴
소프트웨어 디자인 패턴 중 하나로, 특정 클래스의 인스턴스를 오직 하나만 생성하도록 보장하고 이를 전역적으로 접근할 수 있게 하는 패턴
사용하는 이유
데이터베이스 연결, 로거, 설정 객체 등과 같이 공유 리소스를 관리하는 데 유용하기 때문이다.
예제
public class Singleton {
// 클래스 내부에 private static 인스턴스를 생성합니다.
private static Singleton uniqueInstance;
// 생성자를 private로 선언하여 외부에서 인스턴스를 생성하는 것을 방지합니다.
private Singleton() {
// 초기화 코드를 작성할 수 있습니다.
}
// 외부에서 인스턴스에 접근할 수 있는 public static 메서드를 제공합니다.
public static Singleton getInstance() {
// 인스턴스가 아직 생성되지 않았다면 새로운 인스턴스를 생성합니다.
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
// 이미 생성된 인스턴스를 반환합니다.
return uniqueInstance;
}
// 싱글톤 클래스의 다른 메서드들을 작성할 수 있습니다.
}
- 생성자는 private로 선언되어 외부에서 인스턴스를 직접 생성할 수 없다.
- getInstance() 메서드는 public static으로 선언되어, 외부에서 인스턴스에 접근할 수 있는 방법을 제공한다.
이러한 구조를 통해, Singleton 클래스의 인스턴스는 오직 하나만 생성되고, getInstance() 메서드를 통해 전역적으로 접근할 수 있다.
마무리
static 변수와 이를 활용한 싱글톤 패턴에 대해 알아보았다.
관련 내용을 찾다보니 static과 싱글톤 패턴을 통해 구현하는 경우 발생할 수 있는 문제에 대해서 더 깊게 찾아보았는데 따로 포스팅 해보았다.
'미사용 > KakaoTechCampus' 카테고리의 다른 글
[카테캠] 백엔드 과정 1기 웰컴키트(굿즈) 리뷰 (0) | 2023.04.18 |
---|---|
Java기초[6] 오버로딩과 오버라이딩의 차이점 (0) | 2023.04.15 |
Java기초[4] this, super와 클래스 상속 (0) | 2023.04.12 |
Java기초[3] 접근제어지시자, 정보은닉 (0) | 2023.04.12 |
Java기초[2] 생성자, 기본 / 참조자료형 (0) | 2023.04.12 |