재귀호출


재귀호출 : 메서드의 내부에서 메서드 자신을 다시 호출하는 것.

 

대표적인 예 : 팩토리얼

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

+ Recent posts