본문 바로가기

Java/본격 Java 클래스

[Java] 클래스 변수

클래스 변수와 클래스 메소드
  - 멤버변수와 멤버메소드를 선언할 때 static을 붙이면 클래스 멤버로 선언된다.
  - 일반적으로 멤버라 하면 인스턴스 멤버를 의미하는 경우가 많습니다.
   클래스멤버와 인스턴스멤버를 합하여 멤버라 지칭합니다.
  - 클래스멤버는 인스턴스와 관계없이 동작됩니다.
  - 클래스멤버는 모든 인스턴스에서 공유할 수 있습니다.
  - 단, 클래스멤버에서는 인스턴스 멤버에 접근 할 수 없습니다.

.

.

클래스 변수는 인스턴스 변수와 다른 공간에서 작용한다.

예제1

class InstCnt
{
	static int instNum = 0;
	// 클래스 변수로 인스턴스와 상관없이 동작함.
	int num = 0;
	public InstCnt(){
		instNum++;
		num++;
		System.out.println("클래스 변수 : " + instNum);
		System.out.println("인스턴스 변수 : " + num);
	}
}
class ClassVar
{
	public static void main(String[] args) 
	{
		InstCnt cnt1 = new InstCnt(); // 클래스 변수 : 1, 인스턴스 변수 : 1
		InstCnt cnt2 = new InstCnt(); // 클래스 변수 : 2, 인스턴스 변수 : 1
		InstCnt cnt3 = new InstCnt(); // 클래스 변수 : 3, 인스턴스 변수 : 1

	}
}

.

.

클래스 변수는 인스턴스 없이도 접근 가능하다.

예제2

class AccessWay
{
	static int num = 0;
	AccessWay(){ incrCnt(); }
	public void incrCnt(){ num++; }
	// 같은 클래스내에서 자유롭게 접근 가능
}

class ClassVarAccess
{
	public static void main(String[] args) 
	{
		AccessWay.num++;
		// 인스턴스 없이 클래스로 접근 가능
		AccessWay way = new AccessWay();
		way.num++;
		//인스턴스를 통해서도 접근 가능

		System.out.println("num : " + AccessWay.num); // num : 3
	}
}
728x90
반응형

'Java > 본격 Java 클래스' 카테고리의 다른 글

[Java] Nested 클래스  (0) 2020.07.14
[Java] 클래스 메소드  (0) 2020.06.25
[Java] 정보 은닉(private)  (0) 2020.06.25
[Java] 실습 - 삼각형 넓이 구하기  (0) 2020.06.25
[Java] 실습 - 사과판매3(생성자 이용)  (0) 2020.06.25