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

HYUNBIN CHO·2021년 6월 17일
0

java

목록 보기
12/23
post-thumbnail

🔷 static메서드(클래스 메서드)와 인스턴스 메서드

🔸 클래스 메서드도 클래스 변수와 같이 객체를 생성하지 않고도 호출이 가능하다. (클래스 이름.메서드 이름(매개변수))
➡️ 하지만 인스턴스 메서드는 반드시 객체를 생성해야 호출할 수 있다.
🔸 인스턴스 메서드: 인스턴스 변수를 가지고 작업을 하는 메서드.
➡️ 인스턴스 변수는 인스턴스를 생성해야만 만들어지기 때문에 인스턴스 메서드 또한 인스턴스를 생성해야 호출이 가능하다.

🔹 1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것은 static을 사용한다.

생성된 인스턴스는 서로 다른 값을 독립적으로 유지한다. 그렇기 때문에 같은 값이 유지 되어야 하는 변수는 static을 붙여 클래스 변수로 정의해야 한다.

🔹 2. 클래스 변수는 인스턴스 변수를 생성하지 않아도 사용가능하다.

클래스 변수는 클래스가 메모리에 올라갈 때 같이 생성됨.

🔹 3. 클래스 메서드는 인스턴스 변수를 사용할 수 없다.

🔸인스턴스 변수는 인스턴스가 생성되어야만 사용할 수 있는데 반해 클래스 메서드는 인스턴스 생성 없이 호출이 가능하다.
➡️ 클래스 메서드가 호출되었을 때 인스턴스가 생성되어 있지 않은 경우가 발생할 수 있기 때문에 사용할 수 없다.
(인스턴스 메서드에서 클래스 변수 사용은 가능)

🔹 4. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 쪽으로 고려한다.

메서드 호출 시간이 짧아지기 때문에 성능이 향상된다.

class TestClass{
    void instanceMethod() {}
    static void staticMethod() {}
   
    void instanceMethod2(){
        instanceMethod();
        staticMethod();
    }
   
    static void staticMethod2(){
        staticMethod();
        instanceMethod(); // 에러발생함.
    }
}

class TestClass2{
    int iv; 
    static int cv;
   
    void instanceMethod(){
        System.out.println(iv);
        System.out.println(cv);
    }
   
    void staticMethod(){
        System.out.println(iv);// 에러 발생함.
        System.out.println(cv);
    }
}
class Math{
    long a, b; // iv
   
    long add(){ return a + b;}
    long subtract(){ return a - b;}
    long multiply(){ return a * b;}
    double divide(){ return a / b;}    
   
    static long add(long a, long b){ return a + b;}
    static long subtract(long a, long b){ return a - b;}
    static long multiply(long a, long b){ return a * b;}
    static double divide(double a, double b){ return a / b;}

}

class Test{
    public static void main(String args[]){
   
        // static 메서드 호출
        long a1 = Math.add(100L, 100L);
        long b1 = Math.subtract(200L, 100L);
        long c1 = Math.multiply(100L, 100L);
        double d1 = Math.divide(200.0, 100.0);

        // Math 인스턴스 생성 후 인스턴스 메서드 호출
        Math math = new Math();
        math.a = 200L;
        math.b = 100L;
        long a2 = math.add();
        long b2 = math.subtract();
        long c2 = math.multiply();
        double d2 = math.divide();
    }
}   
profile
백견이 불여일타

0개의 댓글

관련 채용 정보