Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

class 메서드(static 메서드)와 instance 메서드 본문

Java/객체지향

class 메서드(static 메서드)와 instance 메서드

빌드이너프 2023. 5. 30. 13:19

class 메서드(static 메서드)

객체생성 없이 클래스이름.메서드이름()으로 호출

인스턴스 멤버(iv, im)과 관련없는 작업을 하는 메서드

메서드 내에서 인스턴스 변수(iv) 사용불가

객체 생성 없이 호출가능한 메서드

 

instance 메서드

인스턴스 생성 후, 참조변수.메서드이름()으로 호출

인스턴스 멤버(iv, im)과 관련된 작업을 하는 메서드

메서드 내에서 인스턴스 변수(iv) 사용가능

 

class MyMath2 {
    long a, b;

    // 인스턴스변수 a, b만을 이용해서 작업하므로 매개변수가 필요없다.
    long add() 	    { return a + b; }  // a, b는 인스턴스변수
    long subtract() { return a - b; }
    long multiply() { return a * b; }
    double divide() { return a / b; }

    // 인스턴스변수와 관계없이 매개변수만으로 작업이 가능하다.
    static long   addd(long a, long b) 	   	 { return a + b; } // a, b는 지역변수
    static long   subtractt(long a, long b)   { return a - b; }
    static long   multiplyy(long a, long b)	 { return a * b; }
    static double dividee(double a, double b) { return a / b; }
}

class MyMathTest2 {
    public static void main(String args[]) {
        MyMath2 mm = new MyMath2(); // 인스턴스를 생성
        mm.a = 200L;
        mm.b = 100L;
        // 인스턴스메서드는 객체생성 후에만 호출이 가능함.
        System.out.println(mm.add());
        System.out.println(mm.subtract());
        System.out.println(mm.multiply());
        System.out.println(mm.divide());
        
        System.out.println();

        // 클래스메서드 호출. 인스턴스 생성없이 호출가능
        System.out.println(MyMath2.addd(200L, 100L));
        System.out.println(MyMath2.subtractt(200L, 100L));
        System.out.println(MyMath2.multiplyy(200L, 100L));
        System.out.println(MyMath2.dividee(200.0, 100.0));


    }
}

300
100
20000
2.0

300
100
20000
2.0

 

언제 static 메서드를 사용해야하는가?

속성(멤버 변수) 중에서 공통 속성에 static 붙인다

인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static를 붙인다 

 

 

메서드 간의 호출과 참조

static 메서드는 인스턴스 변수(iv)를 사용할 수 없다

public class TextCalss2 {
    int iv; // 인스턴스 변수
    static int cv; // 클래스 변수
    
    void instanceMethod() { // 인스턴스 메서드
        System.out.println(iv); // 인스턴스 변수 사용 가능
        System.out.println(cv); // 클래스 변수 사용 가능
    }

    static void staticMethod() {
        // System.out.println(iv); // 에러, 인스턴스 변수 사용 불가능
        System.out.println(cv); // 클래스 변수 사용 가능
    }
}

 

static 메서드는 인스턴스 메서드(im)을 호출할 수 없다

public class TestClass {
    void instanceMethod() {} // 인스턴스 메서드
    static void staticMethod() {} // static 메서드
    
    void instanceMethod2() { // 인스턴스 메서드
        instanceMethod(); // 다른 인스턴스 메서드 호출 가능
        staticMethod(); // static 메서드 호출 가능
    }
    
    static void staticMethod2() { // static 메서드
        // instanceMethod(); // 에러, 인스턴스 메서드 호출 불가능
        staticMethod(); // static 메서드 호출 가능
    }
}

 

*static 메서드가 인스턴스 메서드를 호출하는 것이 불가능하다

 

1. static 메서드는 static 메서드 호출 가능?

O

 

2. static 메서드는 instance 변수 사용 가능?

X

 

3. static 메서드는 instance 메서드 호출 가능?

X

 

4. static 메서드가 instance 멤버(iv, im)을 사용할 수 없는 이유?

static 메서드 호출 시 객체가 없을 수도 있기 때문

(static 메서드는 객체 유무와 상관없이 호출 가능하지만, instance 멤버는 객체가 반드시 필요하기 때문 / 

객체가 없기 때문에 instance 멤버도 없고, instance 메서드(im)는 상관이 없지만 instance variable(iv)를 가지고 작업을 하기 때문에 im도 사용하지 못한다)

'Java > 객체지향' 카테고리의 다른 글

생성자 Constructor  (0) 2023.06.01
오버로딩 overloading  (0) 2023.05.30
기본형 매개변수와 참조형 매개변수  (0) 2023.05.26
return 문 (void => return 문 생략 가능)  (0) 2023.05.25
메서드(method)  (0) 2023.05.25