본문 바로가기

Java의 정석

객체 지향 개념 - 9 메서드 간의 호출과 참조

메서드 간의 호출과 참조

같은 클래스에 속한 멤버들 간에는 별도의 인스턴스를 생성하지 않고도 서로 참조 또는 호출이 가능하다. 단, 클래스 멤버가 인스턴스 멤버를 참조 또는 호출하고자 하는 경우에는 인스턴스를 생성해야 한다.

 

그 이유는 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스 멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수도 있기 때문이다.

class TestClass {
    void instanceMethod() {}
    static void staticMethod() {}
    
    int iv;
    static int cv;
    
    void instanceMethod2() {
        instanceMethod(); // 다른 인스턴스 메서드 호출
        staticMethod(); // 클래스 메서드 호출
        
        System.out.println(iv); // 인스턴스 변수를 사용할 수 있음
        System.out.println(cv); // 클래스 변수를 사용할 수 있음
    }
    
    static void staticMethod2() {
        // instanceMethod(); // 인스턴스 메서드를 호출 할 수 없음
        staticMethod(); // 다른 클래스 메서드 호출
        
        // System.out.println(iv); // 인스턴스 변수를 사용할 수 없음
        System.out.println(cv); // 클래스 변수를 사용할 수 있음
    }
}

위의 코드는 같은 클래스 내의 인스턴스 메서드와 static 메서드 간의 호출에 대해서 설명한다.

 

같은 클래스 내의 메서드는 서로 객체의 생성이나 참조 변수 없이 직접 호출이 가능하나 static 메서드는 인스턴스 메서드를 호출할 수 없다.

 

또한 메서드 간의 호출에서처럼 인스턴스 메서드는 인스턴스 변수를 사용할 수 있지만, static 메서드는 인스턴스 변수를 사용할 수 없다.