Java static 메서드와 인스턴스 메서드

nathan·2021년 12월 29일
0

JAVA

목록 보기
10/45

static 메서드와 인스턴스 메서드

  • instance variable의 사용 여부로 갈림

인스턴스 메서드

  • 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
  • 인스턴스 멤버(instacne variable, instance method)와 관련된 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용 가능

static 메서드

  • 객체 생성 없이 '클래스이름.메서드이름()'으로 호출
  • 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용 불가
public class EX5_11 {
    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());
    }
}

class MyMath2
{
    long a, b; // instance variables
    
    long add()	 // 인스턴스 메서드
    {     
        return a+b; 
    }
    
    static long add(long a, long b) // static 메서드
    {
        return a+b;
    }
}

왜 static 메서드는 인스턴스 멤버를 쓸 수 없나?

  • static 메서드 호출시 객체(iv 묶음)가 없을 수 있기 때문이다.

정리 : static을 언제 붙여야 할까?

  • 속성(instance variable) 중에서 공통 속성에 static을 붙인다.
    • 포커 카드 너비, 폭 생각하기
  • 인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙인다.

메서드 간 호출과 참조

  • static 메서드는 인스턴스 변수(iv)를 사용할 수 없다.
class TestClass{
    int iv; // 인스턴스 변수
    static int cv; // 클래스 변수
    
    void instanceMethod(){  // 인스턴스 메서드
        System.out.println(iv); // 인스턴스 변수 사용 가능
        System.out.println(cv); // 클래스 변수 사용 가능
    }
    
    static void staticMethod(){
        System.out.println(iv); // error! (인스턴스 변수 사용 불가)
        System.out.println(cv); // 클래스 변수 사용 가능
    }
    
}
profile
나는 날마다 모든 면에서 점점 더 나아지고 있다.

0개의 댓글