static 메서드와 인스턴스 메서드
인스턴스 메서드
- 인스턴스 생성 후 ‘참조변수. 메서드이름()’로 호출
- 인스턴스 멤버와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수 사용가능
static 메서드(클래스메서드)
- 객체생성없이 ‘클래스이름. 메서드이름()’으로 호출
- 인스턴스 멤버와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수 사용불가
결론
메서드 내에서 인스턴스 변수를 쓰냐 안 쓰냐의 차이다.
class MyMath2 {
long a, b;
//인스턴스변수 a, b만을 이용해서 작업하므로 매개변수가 필요없다.
long add(){
return a + b; // a, b는 인스턴스변수
}
//인스턴스변수와 관계없이 매개변수만으로 작업이 가능하다.
static long add(long a, long b){
return a + b; //a, b는 지역변수
}
}
class MyMathTest2 {
public static void main(String args[]) {
//클래스메서드 호출. 인스턴스 생성없이 호출가능
System.out.println(MyMath2.add(200L, 100L));
MyMath2 mm = new MyMath2(); // 인스턴스를 생성
mm.a = 200L;
mm.b = 100L;
// 인스턴스메서드는 객체생성 후에만 호출이 가능함.
System.out.println(mm.add());
}
}
❓ static을 언제 붙여야 할까
- 속성(멤버 변수)중에서 공통 속성에 static을 붙인다
- 인스턴스 멤버를 사용하지 않는 메서드에 static을 붙인다.
메서드 간의 호출과 참조
- static 메서드는 인스턴스 변수를 사용할 수 없다.
→ static메서드는 객체 생성없이 호출가능한데 인스턴스 변수는 객체 생성이 필수기 때문
❓ 왜 인스턴스 변수는 객체 생성이 필수일까
-> 이 메서드를 호출했을 때 객체가 있을지 없을지 보장이 안되기 때문에
- static 메서드는 인스턴스 메서드를 호출할 수 없다.
오버로딩
오버로딩의 올바른 예
- 매개변수는 다르지만 같은 의미의 기능수행한다.
class MyMath3 {
int add(int a, int b) {
System.out.print("int add(int a, int b) - ");
return a+b;
}
long add(int a, long b) {
System.out.print("long add(int a, long b) - ");
return a+b;
}
int add(int[] a) { // 배열의 모든 요소의 합을 결과로 돌려준다.
System.out.print("int add(int[] a) - ");
int result = 0;
for(int i=0; i < a.length;i++) {
result += a[i];
}
return result;
}
}
'📝 끄적끄적 > 🖥️ 자바의 정석' 카테고리의 다른 글
[자바의 정석] 제어자, 캡슐화 (0) | 2023.09.24 |
---|---|
[자바의 정석] 상속, 참조변수 super, 생성자 super() (0) | 2023.09.23 |
[자바의 정석] 생성자, 변수/멤버 변수의 초기화 (0) | 2023.09.22 |
[자바의 정석] 기본형/참조형 매개변수, 참조형 반환타입 (0) | 2023.09.20 |
[자바의 정석] 클래스 변수와 인스턴스 변수, 호출스택 (0) | 2023.09.19 |
[자바의 정석] 클래스와 객체 (0) | 2023.09.17 |