[Java/객체지향] static 메서드와 인스턴스메서드

2024. 8. 18. 20:12프로그래밍 언어/Java

인스턴스 메서드 - iv 사용O

  • 객체(인스턴스) 생성 후, ‘참조변수. 메서드이름( )’으로 호출
  • 인스턴스 멤버(iv,im)와 관련된 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용 가능 → iv 사용하니, 매개변수 필요X

static 메서드 - iv 사용X

  • 객체 생성 필요X, ‘클래스이름.메서드이름( )’으로 호출 → ex) Math.round( ), Math.random( )
  • 인스턴스 멤버와 관련없는 작업을 하는 메서드
  • 메서드 내에서 인스턴스변수 사용X → 작업에 필요한 값 등을 매개변수로 받으니 필요X

언제 static 사용?
  1. 속성(멤버변수) 중 공통속성(cv)
  2. 인스턴스 멤버(iv, im)사용X 메서드→ 인스턴스 메서드와 클래스 메서드는 명령문 집합이라는 같은 Base
  3. → But, “iv사용”이라는 차이만 존재→ But, “iv사용”이라는 차이만 존재
  4. 메서드는 “명령문 집합”
class MyMath2{
    long a, b;//인스턴스변수(클래스 전체에서 유효)
    
    long add() {//**인스턴스메서드**
        return a+b;} //인스턴스변수
    
    static long add(long a, long b) {//**클래스메서드** //매개변수=지역변수(클래스 선언~종료까지 유효)
        return a+b;}//지역변수
}

class MyMathTest2 {
    public static void main(String args[]){
        System.out.println(MyMath2.add(200L,100L));//**클래스메서드 호출**
        
        MyMath2 mm = new MyMath2();//**객체(인스턴스) 생성 (1)**
        mm.a = 200L;
        mm.b = 100L;
        System.out.println(mm.add());//**인스턴스메서드 호출 (2)**
    }

메서드 간의 호출과 참조

  • 인스턴스변수: 객체 생성 후 사용
  • 클래스변수: 언제나 사용
  • 인스턴스메서드
    1. 객체 생성 후 호출
    2. iv, cv
  • 클래스메서드
    1. 언제나 호출
    2. cv only
    3. 인스턴스 메서드 호출 X