오늘은 java를 비롯한 많은 프로그래밍 언어에서 사용되는 static이라는 개념에 대해서 정리해보도록 하겠습니다.
여러분들은 언제 static이라는 키워드를 사용하십니까? 저의 경우에는 일반적으로 전역변수를 사용하거나 유일하게 존재해야만 하는 singleton객체를 생성할 때 사용합니다.
static키워드를 사용하면 처음에 초기화된 순간부터 메모리의 한 영역에 할당되어 특별한 명령이 없으면(메모리 free명령 등) 프로그램이 종료될 때까지 해당 영역을 차지하게 됩니다. 그래서 이를 변수로 사용하면 한 클래스로 생성된 N개의 객체에서 하나로 통용되는 변수로 사용될 수도 있습니다. 예를들어 휴대폰 공장에서 휴대폰을 만들었다고 가정해봅시다. 휴대폰이라는 클래스로 Phone이라는 클래스가 만들어질 수 있겠죠 ?? 그런뒤에 휴대폰이 만들어질 때마다 객체가 하나씩 생긴다고 가정해보자면 Phone클래스 내부에는 num이라는 static변수가 존재하고 phone의 생성자가 호출될 때마다 num++이라는 연산을 수행할 것입니다.
예시)
public class Phone{
static int num;
int model;
String serialNum;
int price;
int volume;
public Phone(int model, String serialNum, int price, int volume){
this.model = model;
this.serialNum = serialNum;
this.price = price;
this.volume = volume;
num++;
}
}
이러한 경우 static 변수를 사용할 수 있습니다.
static변수와 static메소드
또 다른 경우 static 클래스를 사용할 수도 있습니다. static클래스의 경우 싱글톤 구조로 사용될 수 있습니다.
예를들어 위의 Phone클래스 내에는 운영체제에 해당하는 객체가 변수로 존재할 수 있습니다. 그 경우 OS라는 새로운 클래스를 만들어 Phone클래스 내의 변수로 위치시킬 수 있겠죠??
다음과 같이 말입니다.
public class Phone{
static int num;
int model;
String serialNum;
int price;
int volume;
OS os;
public Phone(int model, String serialNum, int price, int volume){
this.model = model;
this.serialNum = serialNum;
this.price = price;
this.volume = volume;
this.os = OS.newInstance();
num++;
}
public static class OS{
//OS와 관련된 많은 기능들
OS os;
public OS newInstance(){
if(os == null){
os = new OS();
}
return os;
}
}
}
위의 경우는 실제로는 공장에서 하나의 OS만을 초기화해서 제공하고 OS에 해당하는 클래스와 객체는 하나만 존재하고 생산된 여러가지 휴대폰에서 모두 같은 OS를 적용하는 경우를 의미합니다. 이외에도 여러가지 다른 경우가 존재할 수 있습니다. 이처럼 특별하게 클래스와 객체가 하나만 존재해야할 경우 static이라는 키워드를 사용하여 클래스와 객체를 정의할 수 있습니다.
singleton패턴
https://asfirstalways.tistory.com/335
[DP] 1. 싱글턴 패턴(Singleton pattern)
#1. 싱글턴 패턴(Singleton Pattern) 싱글턴 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴이다. 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등의 경우, 인스턴스를 여러 개 만들게 되면 자원을 낭비하..
asfirstalways.tistory.com
이외에도 static 메소드와 같이 다른 방식으로도 static 키워드를 사용할 수 있습니다. 다만 static이라는 개념은 제 생각에는 유일성에 좀 더 초점을 맞추어 사용하게 되는 것 같습니다...!!