본문 바로가기
프로그래밍/자바(Java)

[Java] 자바 static 정적 변수와 메소드

by imfireguy 2021. 6. 9.
반응형

@Tirza van Dijk unsplash

자바 static 정적 변수

자바에서 static은 보통 변수나 메소드 앞에 static 키워드를 붙여서 사용합니다.

예를 들어 아래처럼 사용합니다.

static String fruit = "과일";

 

static 변수 사용 시 장점

 

1. 메모리 할당

static 키워드를 붙이면 자바는 메모리 할당을 딱 한 번만 하게 되어 메모리 사용에 이점을 볼 수 있습니다.

그래서 항상 값이 변하지 않는 경우라면 static 키워드를 사용하시면 좋습니다.

하나의 예시를 보겠습니다.

public class Static_Test {
	static String fruit = "과일";
	
	public static void main(String[] args) {
			Static_Test fr = new Static_Test();
			Static_Test fr1 = new Static_Test();
	}
}

 

2. 메모리 공유

static을 사용하는 또 한 가지 이유로 공유의 개념을 들 수 있습니다.

static으로 설정하면 같은 곳의 메모리 주소만을 바라보기 때문에 static 변수의 값을 공유하게 됩니다. 

아래의 예시를 한번 보겠습니다.

public class Count {
	
	int cnt = 0;
	Count(){
		this.cnt++;
		System.out.println("count는? " + this.cnt);
	}
	
	public static void main(String[] args) {
		Count cnt1 = new Count();
		Count cnt2 = new Count();
	}

}

프로그램 실행 시 아래의 결과를 얻을 수 있습니다.

count는? 1
count는? 1

cnt1과 cnt2 객체 생성 시 cnt 값을 1씩 증가하더라도 cnt1과 cnt2는 서로 다른 메모리를 가리키고 있기 때문에 cnt가 증가된 원하는 결과가 나오지 않을 것입니다.

객체 변수는 항상 독립적인 값을 갖기 때문에 당연한 결과일 것입니다.

public class Count {
	
	static int cnt = 0;
	Count(){
		this.cnt++;
		System.out.println("count는? " + this.cnt);
	}
	
	public static void main(String[] args) {
		Count cnt1 = new Count();
		Count cnt2 = new Count();
	}

}

int cnt = 0; 앞에 static 키워드를 붙여 보았더니 cnt 값이 공유되어 카운트 값이 증가된 결과가 나오게 되었습니다.

count는? 1
count는? 2

 

static method

satic이라는 키워드가 메소드 앞에 붙으면 이 메소드는 스태틱 메소드(static method)가  됩니다.

아래 예제를 보겠습니다.

public class Count {
	
	static int cnt = 0;
	Count(){
		this.cnt++;
		System.out.println("count는? " + this.cnt);
	}
	
	public static int getCnt() {
		return cnt;
	}
	
	public static void main(String[] args) {
		Count cnt1 = new Count();
		Count cnt2 = new Count();
	}

}

getCnt()라는 static 메소드를 추가했습니다. main 메소드에서는 Count.getCnt()와 같이 클래스를 통해 호출할 수 있습니다. 

※스태틱 메소드 안에서는 인스턴스 변수 접근이 불가능합니다. 예제에서 cnt는 static 변수이기 때문에 스태틱 메소드(static method)에서 접근이 가능 합니다.

 

 

 

반응형

댓글