[Java] static

Junseo Kim·2019년 12월 23일
1

[Java]자바 기초

목록 보기
16/35

static

메모리 주소 값이 '정적이다'는 뜻(<-> dynamic(메모리 주소 값이 동적이다))
프로그램 시작 시, 메모리의 위치가 정해지는 것.(어느 패키지에 있던 찾을 수 있다.)
어느 정도의 용량을 미리 확보.

Tip) 이때까지 일반적으로 사용 하던 변수는 동적으로 사용하던 것이다.
ex. String a = "";

static 변수와 일반 변수 비교

클래스의 멤버변수로 static 변수와 일반 변수(dynamic)가 있을 경우, 메인에서 사용 시 dynamic 변수는 class를 생성해 준 후, 사용해야 하지만, static 변수는 메모리의 위치가 이미 정해져있기 때문에, class를 생성해 주지 않고도, 사용가능하다.

ex.

// class example

public class unit {
	
	public static int staticNum;
	public int dynamicNum;

}
//dynamic 

public class main {

	public static void main(String[] args) {
		
		unit a = new unit(); // class를 생성해 준 후
		System.out.println(a.dynamicNum); // 멤버변수 사용가능
	}

}
//static

public class main {

	public static void main(String[] args) {

		System.out.println(unit.staticNum); // class 생성 없이, 멤버변수 바로 접근가능
	}

}

Tip) 언제 어디서든 사용하기 편하지만, 메모리를 어느정도 먹기 때문에, 너무 많이 사용 시 메모리 낭비가 심하다.

Tip) class를 여러개 생성 해서 사용하여도, 한 메모리를 사용하는 것이기 때문에, 각각 사용할 수 없다.
ex.

public class main {

	public static void main(String[] args) {
		
        // unit class 3개 생성
		unit a = new unit();
		unit b = new unit();
		unit c = new unit();
		
        // 생성된 각각의 static변수에 각각 다른 값 할당
		a.staticNum=10; 
		b.staticNum=20;
		c.staticNum=30;
		
        // but, 출력 결과 모두 같음 -> 모두 같은 메모리 사용 중이기 때문
		System.out.println(a.staticNum);
		System.out.println(b.staticNum);
		System.out.println(c.staticNum);
	}

}

스크린샷 2019-12-24 오전 12.59.35.png

0개의 댓글