스태틱 메서드와 인스턴스 메서드

스테틱 메서드와 인스턴스 메서드는 모양에서 차이가 존재합니다 아래의 코드를 통해 확인 해 볼까요?

static print(String a){

				return a;
}

 printAll(String a){

				return a;
}

위에 static 이 붙고 안 붙고의 차이라는것을 금방 확인할 수있습니다. 그러면 이제 기능적인 면에서 차이를 확인 해볼까요?

<aside> 💻 static 과 인스턴스? 하나의 객체 마다 다르게 유지되어야 하는 값이 존재하고, 모든 객체가 공통적으로 가져야하는 값이 존재한다고 가정해 봅시다. 포커 카드를 예로 들자면, 카드 내의 숫자와 스페이드 다이아와 같은 무늬는 전자 카드의가로와 세로 길이는 후자에 해당되겠죠? 그래서 전자의 경우 클래스 변수(cv) 후자를 인스턴스변수(iv)라고 부르게 됩니다. 결국 속성 중 공통적으로 유지되어야하는 것을 static 이라 부르게되는 것이지요.

</aside>

인스턴스 메서드

인스턴스 생성 후 참조변수.메서드이름()으로 호출합니다.인스턴스 멤버와 관련이 있는 메서드 입니다. 메서드 내에서 인스턴스 변수 사용이 가능합니다.

static 메서드

객체를 생성하지 않아 참조 변수가 존재하지 않으므로, 클래스명.메서드명()으로 호출 합니다. 인스턴스 멤버와 관련이 없는 작업을 하는 메서드로 메서드 내에서 인스턴스 활용이 불가능합니다.

결국 이둘의 차이는 인스턴스 변수의 사용 유무로 갈린다고 할 수 있겠죠?.아래의 코드를 통해 차이점을 조금 더 확인해볼까요?

class MyMath{
    int a,b;

    long add (){
        return  a+b;
    }

    static long add(int a , int b){
        return a+b;
    }
}

현재 둘의 차이는 static의 경우 매개 변수를 받아 이용해 주고 있다는 차이를 제외하면 모두 동일하다는 것을 확인 할 수 있습니다. 그런데 현재 int a,b 는 인스턴스 변수로 클래스 전체에서 이용이 가능합니다.하지만 static에서 사용하고 있는 a,b 는 지역 변수이지요. 리턴 시에 이용되는 a,b 둘다 지역변수가 되게 됩니다. 즉 첫번째 나온 add는 인스턴스 변수를 이용 후자는 이용하지 않는 다는 것을 확인할 수있습니다.

아래의 코드를 통해 사용법을 확인 해볼까요?

class UseMethod{

    public static void main(String[] args) {
				//인스턴스 메서드
        MyMath math = new MyMath();
                math.a=100;
                math.b=200;
        System.out.println(    math.add());
				//객체생성업이 진행되는 클래스메서드 
        System.out.println(   MyMath.add(200,500));

    }

그러면 static을 언제 이용해야 할까요?