프로그래밍/JAVA

자바 - 정적멤버[static](5)

개발자 덕구🐾 2021. 8. 21. 16:09
728x90

 

static은 한단어로 말하면 "공유"이다. 

 

-> 클래스의 필드(변수)를 공유할수있게해준다.

+ 객체를 생성하지 않아도 메소드를 호출할 수 있도록 해준다.  (메서드에서는 클래스 변수만 사용가능)

 

 

 

 

<인스턴스 변수>

클래스에서 객체를 만들면 각 객체마다 변수가 생성된다.

각 변수는 독립적이다. 

-> 객체가 생성될때 함께 생성되며 객체가 소멸되면 함께 소멸된다.

 

 

<static 변수>

static 키워드로 지정하여 클래스의 모든 객체가 공유하는 변수다. (클래스 변수라고도 한다)

-> 객체 생성전에도 접근이 가능하다.

-> 객체를 여러개 생성한다고 해도 static변수는 하나뿐이다.

 

 

=> 인스턴스 변수는 객체 생성 후에만 호출이 가능 && static변수는 객체 생성 전에도 호출이 가능하다.

 

 

정적멤버 접근법 

클래스 이름. 정적변수이름
클래스 이름. 정적메서드이름()

객체의 이름이 아닌 클래스의 이름으로 호출해야한다.

 

 

 

예시 코드 )

class Circle{
	double radius;
	static int numofCircles = 0; // static변수
	int numCircles = 0; //인스턴스 변수 //객체마다 별도의 공간 사용
	
	public Circle(double radius) {
		this.radius = radius;
		numofCircles++;
		numCircles++;
	}
}


public class CircleDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Circle my = new Circle(10.0);
		Circle your = new Circle(5.0);
		
		System.out.println("원의 개수는 " + Circle.numofCircles); 
		System.out.println("원의 개수는 " + my.numCircles);

	}

}

 

numofCircles는 정적변수이므로 클래스당 한개이다. 그러므로 객체가 생성될때마다 1씩 증가하여 2가 출력된다. 

접근을 할때는 클래스의 이름으로 Circle.numofCicles로 접근한다.

 

 

numCircles는 인스턴스 변수로 객체마다 하나씩 생긴다. 즉 객체마다 numCircles를 위한 기억공간이 존재한다.

즉 my.numCircles를 하든, yourCircles를 하든 0에서 시작하므로 결과적으로 1이 출력된다.

 

 

 

예제 코드의 출력 결과

 

 

 

 

+) main은 정적메서드이다.

반응형