프로그래밍 기초/JAVA

static 객체와 일반객체

godsangin 2019. 12. 11. 16:07
반응형

오늘은 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메소드

https://velog.io/@lshjh4848/static%EB%B3%80%EC%88%98%EC%99%80-static-%EB%A9%94%EC%84%9C%EB%93%9C-final-xpk2l8e7g0

불러오는 중입니다...

또 다른 경우 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이라는 개념은 제 생각에는 유일성에 좀 더 초점을 맞추어 사용하게 되는 것 같습니다...!!