재귀호출
재귀호출 : 메서드의 내부에서 메서드 자신을 다시 호출하는 것.
대표적인 예 : 팩토리얼
static 메서드는 인스턴스를 만들지않고 호출할 수 있다.
int n = factorial(4);
System.out.println(n);
}
static int factorial(int n) {
if (n==1) return 1;
return n * factorial(n-1);
}
xn승까지 합을 구하는 예제
int x = 2;
int n = 5;
long result = 0;
for (int i=1;i<=n;i++){
result +=power(x,i);
}
System.out.println(result);
}
static long power(int x , int n) {
if (n==1) return x;
return x*power(x,n-1);
}
클래스 메서드와 인스턴스 메서드
사용
- 메서드 앞에 static이 붙으면 클래스 메서드이고 붙어있지 않으면 인스턴스 메서드이다.
- 인스턴스 메서드는 반드시 객체를 생성해야된다.
인스턴스 메서드 - 인스턴스 변수와 관련된 작업을 하는 , 메서드의 작업을 수행하는 데 인스턴스 변수를 필요로 하는 메서드이다.
클래스 메서드 - 인스턴스와 관계없는 메서드를 클래스 메서드라고 한다. ( 인스턴스 변수를 사용하지 않는다면 static사용)
다음 예제는 인스턴스 메서드와 클래스 메서드의 예제이다.
public class MyMath2 {
public long a,b;
public long add() { //인스턴스 메서드
return a + b;
}
public static long add(long a, long b) { //클래스 메서드
return a + b;
}
}
System.out.println(MyMath2.add(200L,100L)); //클래스 메서드
MyMath2 mm = new MyMath2(); //인스턴스 생성
mm.a = 300L;
mm.b = 300L;
System.out.println(mm.add()); //인스턴스 메서드
같은 클래스의 멤버간에는 객체생성이나 참조변수 없이 참조할 수 있다.
하지만 static멤버들은 인스턴스 멤버들을 참조할수 없다. (인스턴스 멤버는 인스턴스를 생성해야하기때문에)
void instanceMethod(){}
static void staticMethod(){}
void instanceMethod2() {
instanceMethod();
staticMethod();
}
static void staticMethod2(){
instanceMethod(); //에러
staticMethod();
}
메서드 오버로딩
하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩이라고 한다.
조건
- 메서드의 이름이 같아야한다.
- 매개변수의 개수 또는 타입이 달라야한다.
- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
long add(int a ,int b) {return a+b;}
long add(long a ,int b) { return a+b};
가변인자 오버로딩
매개변수의 개수를 동적으로 하는 것.
System.out.println(PlusString("hi","li","ks"));
static String PlusString(String str, String... dlim) {
System.out.println(str);
System.out.println(Arrays.toString(dlim));
return str;
}
'IT 관련 > JAVA' 카테고리의 다른 글
자바 객체지향언어II(상속,오버라이딩,super (0) | 2022.06.28 |
---|---|
자바 객체지향언어I (생성자 , 변수의 초기화) (0) | 2022.06.23 |
자바 객체지향언어I (JVM메모리 , 기본형 참조형 매개변수) (0) | 2022.06.17 |
자바 객체지향언어I ( 인스턴스, 메서드) (0) | 2022.06.17 |
자바 배열(array) (0) | 2022.06.11 |