인스턴스 메서드는 인스턴스 변수와 관련된 작업을 한다. 즉, 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드이다.
인스턴스와 관계없는(인스턴스 변수나 인스턴스 메서드를 사용하지 않는)메서드를 클래스 메서드를 클래스 메서드(static메서드)로 정의한다.
- 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
- 클래스 변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.
- 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
package object_oriented_programming;
class MyMath2{
long a, b;
long add() {return a+b;}
long subtract() {return a-b;}
long multiply() {return a*b;}
double divide() {return a/b;}
static long add(long a, long b) {return a+b;}
static long subtract(long a, long b) {return a-b;}
static long multiply(long a, long b) {return a*b;}
static double divide(double a, double b) {return a/b;}
}
public class MyMathTest2 {
public static void main(String[] args) {
System.out.println(MyMath2.add(200L, 100L));
System.out.println(MyMath2.subtract(200L, 100L));
System.out.println(MyMath2.multiply(200L, 100L));
System.out.println(MyMath2.divide(200.0, 100.0));
MyMath2 mm = new MyMath2();
mm.a = 200L;
mm.b = 100L;
System.out.println(mm.add());
System.out.println(mm.subtract());
System.out.println(mm.multiply());
System.out.println(mm.divide());
}
}
//결과
300
100
20000
2.0
300
100
20000
2.0
클래스 멤버와 인스턴스 멤버간의 참조와 호출
인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스 멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수도 있기 때문이다.
package object_oriented_programming;
public class MemberCall {
int iv = 10;
static int cv = 20;
int iv2 = cv;
// static int cv2 = iv; //에러. 클래스 변수는 인스턴스변수를 사용할 수 없음.
static int cv2 = new MemberCall().iv;
static void staticMethod1() {
System.out.println(cv);
// System.out.println(iv); //에러. 클래스 메서드엔서 인스턴스 변수를 사용불가
MemberCall c = new MemberCall();
System.out.println(c.iv);
}
void instanceMethod1() {
System.out.println(cv);
System.out.println(iv); //인스턴브메서드 에서는 인스턴스 변수를 바로 사용가능
}
static void staticMethod2() {
staticMethod1();
// instanceMethod1(); //에러. 클래스메서드에서는 인스턴스메서드를 호출할 수 없음.
MemberCall c = new MemberCall();
c.instanceMethod1();
}
void instatnceMethod2() {
staticMethod1();
instanceMethod1();
}
}
출처 : JAVA의 정석 - (남궁성지음)