본문 바로가기

개발 관련 지식/자바(Java)

[자바] 클래스메서드(static 메서드)와 인스턴스메서드

* 인스턴스 메서드

: 인스턴스변수와 관련된 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스변수를 필요로 하는 메서드이다.

 

 

* 클래스 메서드

: 메서드 중 인스턴스와 관계없는(인스턴스변수나 인스턴스메서드를 사용하지 않는) 메서드를 클래스메서드(static 메서드)로 정의한다.

 

1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통적으로 사용해야하는 것에 static을 붙인다.

2. 클래스변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.

3. 클래스메서드(static메서드)는 인스턴스변수를 사용할 수 없다.

4. 메서드 내에서 인스턴스변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.

 

 

<예문>

package Exercise;

class MyMath2{
long a, b;

// 인스턴스변수 a, b만을 이용해서 작업하므로 매개변수가 필요없다.
long add() { return a + b; } // 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; } // 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 { 

 /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 클래스메서드 호출
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));

System.out.println("----------------------");

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());
}

}