자바 학습 & 복습 11일차 - 인스턴스 & static 매서드

728x90

static(클래스) & 인스턴스 메서드

인스턴스는 참조변수를 써야하고 클래스 메서드는 객체 생성없이 클래스 변수 이름만으로 호출가능

클래스 메서드 예시: Math.random, Math.round

public class Math{
	int a; //인스턴스 변수: 모든 클래스, 즉 Math 클래스 전체에 적용되는 인스턴스 변수
	int b;
		
	int add() {
		return a + b;
	}
	static int add(int a, int b) { //클래스 변수: 하단의 클래스까지만 적용
		return a + b; // 지역변수
//		지역변수를 사용하고 iv(instance variable = 인스턴스 변수)를 사용하지 않을 때
//		static을 붙여 class 변수로 만듬
	}
}

class MathMain{
	public static void main(String[] args) {
		
		Math math = new Math(); // 인스턴스 변수를 선언하기 위해 객체를 호출해야함
		math.a = 100; //각각의 int 변수에다 숫자 지정
		math.b = 200;
		System.out.println(math.add()); // return 값인 add를 호출하여 두 값을 더함
		
		System.out.println(Math.add(1, 3));
//		클래스의 변수이기 때문에 객체생성없이 클래스 호출만으로도 사용가능
	}
}

static을 붙여서 클래스 메서드로 사용하는 기준:

인스턴스 변수들이 공통적인 값을 유지해야 하는 경우 static을 붙여 class 메서드로 만들고 그 객체를 선언하지 않고 바로 사용 가능하게 만든다.

 

예시:

스타크래프트에서 탱크를 생산한다고 가정하자. 탱크를 생산할때 팩토리에서 나오는 탱크의 최대 HP는 같게해야하므로 static을 붙여 그 인스턴스 변수에 한해 클래스 메서드로 만든다.

다만 전투가 벌어질 때 탱크의 각각의 HP 관리는 인스턴스 메서드로 지정해야 다른 탱크들이 공격받을 때 다른 탱크의 HP가 줄어드는 것을 방지할 수 있다.

 

요약:

전체 클래스에 대해 값을 유지해야 하는 변수들은 클래스 메서드로 만들고 각각의 고유의 값을 가져야 하는 변수들은 인스턴스 메서드로 만든다.

728x90