티스토리 뷰

Java

메서드 호출

Alledy 2019. 5. 7. 16:19

메서드의 호출

  • 다른 타입으로 호출했을 경우

    class MyMathTest {
        public static void main(String args[]) {
            MyMath mm = new MyMath();
            double result = mm.divide(5L, 3L);
            System.our.println(result); // prints 1.6666666666666667
        }
    }
    
    class MyMath {
        double divide(double a, double b) P
            return a / b;
    }
    

    divide 메서드 선언 시에 패러미터는 double형으로 선언했는데, 실제 아규먼트는 long형으로 대입한 경우,

    double a = 5L;과 같아서, long형 값을 double형 변수에 저장하는 것과 같다. 이 경우 double로 자동형변환 되어 입력값이 long형이어도 연산 결과는 double형이다.

 

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

  • 인스턴스와 관계없는 메서드를 클래스 메서드(static 메서드)로 정의한다.

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

  • 인스턴스 변수, 인스턴스 메서드(통틀어 인스턴스 멤버)는 인스턴스가 반드시 존재해야 사용할 수 있는데, 클래스 메서드는 이와 관계 없이 호출할 수 있어서이다.

    class MyMath2 {
        long a, b; 
        
        long add() { return a + b; } // a, b는 인스턴스 변수. 인스턴스 변수만 사용하므로 매개변수가 필요없다. 
        static long add(long a, long b) { return a + b; } // a, b는 지역변수.
    }
    class MyMathTest2 {
        System.out.println(MyMath2.add(200L, 300L)); // 클래스 메서드는 인스턴스 생성 없이 바로 사용 가능
        
        MyMath2 mm = new MyMath2(); // 인스턴스 생성 
        mm.a = 200L;
        mm.b = 300L;
        System.out.println(mm.add()); // 인스턴스 메서드는 인스턴스 생성 후 호출 가능
    }
    

     

클래스 멤버와 인스턴스 멤버 간 참조 및 호출

  • 같은 클래스에 속한 멤버 간에 별도 인스턴스를 생성하지 않고도 참조 및 호출이 가능하다.

  • 그러나 클래스멤버가 인스턴스멤버를 참조 또는 호출하고자 하는 경우, 인스턴스 생성이 선행되어야 한다. 클래스멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수 있기 때문이다.

  • 인스턴스멤버간 호출에는 아무런 문제가 없다.

    class MemberCall {
        int iv = 10;
        static int cv = 20; 
        
        void instanceMethod() {
            System.out.println(cv); 
            System.out.println(iv); // 인스턴스변수, 클래스변수 모두 호출 가능 
    }
        
        static void staticMethod() {
            System.out.println(iv); // Error! 
            instanceMethod(); // Error! 
            System.out.println(new MemberCall().iv); 
            new MemberCall().instanceMethod(); // 인스턴스를 생성해서 인스턴스 멤버 호출 가능
        }
    }
    

     

'Java' 카테고리의 다른 글

오버라이딩, Super, Super()  (0) 2019.05.08
클래스 상속, 포함  (0) 2019.05.07
참조형 매개변수, 참조형 반환  (0) 2019.05.07
변수의 종류(클래스변수, 인스턴스변수, 지역변수)  (0) 2019.05.07
this(), this  (0) 2019.04.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함