✔static 메서드와 인스턴스 메서드는 인스턴스 변수 사용 가능 여부로 나뉜다
class MyClass{
long a, b;
long add() { //인스턴스 메서드
retrun a + b;
}
static long add(long a, long b){ //클래스 메서드 (static 메서드)
return a + b;
}
}
class MyClass2{
public static void main(String args[]){
System.out.println(MyClass.add(200L,100L)); //클래스 메서드 호출
MyClass mm = new MyClass();
mm.a = 200L;
mm.b = 100L;
System.out.println(mm.add()); //인스턴스 메서드 호출
}
}
📌인스턴스 메서드
📌static 메서드(클래스메서드)
ex) Math.random();
❗❗ 내가 개발자로 메서드를 만들고 나면 그 다음에는 static을 붙일지 말지 고민해야한다 그렇다면 static은 언제 붙여야할까?
👉 인스턴스 변수(iv)를 사용하지 않을때 붙이면 된다(iv를 사용하면 static을 붙이지 못한다)
✔위에 있는 코드를 보면 static이 붙은 클래스 메서드는 자기 작업에 필요한 매개변수를 지역변수로(lv) 해결하고 있지만, 인스턴스 메서드는 입력값이 없고 인스턴스 변수를 사용한다.
📌속성(멤버 변수) 중에서 공통 속성에 static을 붙인다
class Card{
String kind;
int number;
static int width = 300;
static int height = 250;
}
📌인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙인다
class MyMath{
long a, b;
long add(){return a + b;} //a, b는 인스턴스 변수
static long add(long a, long b){return a + b;} //a, b는 지역변수
}
class TestClass{
int iv; //인스턴스 변수
static int cv; //클래스 변수
void instanceMethod(){ //인스턴스 메서드
System.out.println(iv); //인스턴스 변수를 사용할 수 있다
System.out.println(cv); //클래스 변수를 사용할 수 있다
}
static void staticMethod(){ //static 메서드
System.out.println(iv); //에러!! 인스턴스 변수를 사용할 수 없다
System.out.println(cv); //클래스 변수는 사용활 수 있다
}
}
class TestClass{
void instanceMethod(){} //인스턴스 메서드
static void staticMethod(){} //static 메서드
void instanceMethod2(){ //인스턴스 메서드
instanceMethod; //다른 인스턴스 메서드를 호출한다
staticMethod; //static 메서드를 호출한다
}
static void staticMethod2(){ //static 메서드
instanceMethod //에러!! 인스턴스 메서드를 호출할 수 없다
staticMethod; //static 메서드는 호출할 수 있다
}
}