본문 바로가기
study/Java

자바 Java 메서드 (3) – 메서드의 호출

by 고기만두(개발자) 2021. 8. 20. 19:09
728x90
반응형

이번 시간에는 작성한 메서드를 호출하여 사용하는 방법에 대해 알아볼까 합니다.

메서드에 선언된 매개 변수가 있는지 없는지에 따라, 메서드 호출은

이와 같이 두 가지 방식으로 나뉩니다.

계산기를 호출하는 예제를 통해 메서드가 호출되는 방식에 대해 더 구체적으로 알아보겠습니다.

public class Main
{
	public static void main(String[] args) {
		Calculator mycal = new Calculator();
            mycal.power();
            System.out.println("계산기가 켜졌습니다.");
      
      		long result1 = mycal.add(5,3);
      		long result2 = mycal.subtract(5,3);
      		long result3 = mycal.multiply(5,3);
      		long result4 = mycal.divide(5,3);
      
      		System.out.println("add(5,3)= " + result1);
      		System.out.println("subtract(5,3)= " + result2);
      		System.out.println("multiply(5,3)= " + result3);
      		System.out.println("divide(5,3)= " + result4);
      
      		mycal.power();
     		System.out.println("계산기를 끕니다.");
	}
}

class Calculator{
	long add(long a, long b){
		long result = a+b;
		return result;
	}
	long subtract (long a, long b){
		return a-b;
	}
	long multiply(long a, long b){
		return a*b;
	}
	long divide(long a, long b){
		return a/b;
	}
	boolean power = false;
	void power(){
		power = !power;
	}
}

매개변수가 없는 power 메서드를 통해 계산기의 전원을 켰다 껐다 할 수 있었습니다.

그리고 계산을 하기 위해 입력하는 매개변수 2개를 덧셈, 뺄셈, 곱셈, 나눗셈 메서드에 넣어 각각의 연산 결과값 (나눗셈은 몫) 을 받을 수 있었습니다.

또한, 같은 클래스 내의 메서드끼리는 참조변수를 사용하지 않아도 서로를 호출할 수 있지만, static 메서드의 경우 같은 클래스 내의 인스턴스 메서드를 호출할 수 없습니다.

 

아래의 예제를 통해 경우의 수를 따져보도록 하겠습니다.

class C1{
    static int static_variable = 1;
    int instance_variable = 2;

    static void static_static(){
        System.out.println(static_variable);
    }

    static void static_instance(){
        // 클래스 메소드에서는 인스턴스 변수에 접근 할 수 없다. 
        //System.out.println(instance_variable);
    }

    void instance_static(){
        // 인스턴스 메소드에서는 클래스 변수에 접근 할 수 있다.
        System.out.println(static_variable);
    }

    void instance_instance(){        
        System.out.println(instance_variable);
    }

}

 

static 변수에 1, instance변수에 2를 지정했습니다.

클래스 메서드에서는 instance 변수에 접근할 수 없지만, 그 반대의 경우는 접근이 가능합니다.

같은 형태면 변수에 접근할 수 있는 건 따로 설명드릴 필요가 없을 것입니다.

이 내용을 구체화한 코드가 아래와 같습니다.

public class Main
{
	public static void main(String[] args) {
	 C1 c = new C1();

        // 인스턴스를 이용해서 정적 메소드에 접근 -> 성공
        // 인스턴스 메소드가 정적 변수에 접근 -> 성공 : 1
        c.static_static();

        // 인스턴스를 이용해서 정적 메소드에 접근 -> 성공
        // 정적 메소드가 인스턴스 변수에 접근 -> 실패
        c.static_instance();
        System.out.println("error");

        // 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공
        // 인스턴스 메소드가 클래스 변수에 접근 -> 성공 : 1
        c.instance_static();

        // 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공 
        // 인스턴스 메소드가 인스턴스 변수에 접근 -> 성공 : 2
        c.instance_instance();

        // 클래스를 이용해서 클래스 메소드에 접근 -> 성공
        // 클래스 메소드가 클래스 변수에 접근 -> 성공 : 1
        C1.static_static();

        // 클래스를 이용해서 클래스 메소드에 접근 -> 성공
        // 클래스 메소드가 인스턴스 변수에 접근 -> 실패
        C1.static_instance();
        System.out.println("error");

        // 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패
        //C1.instance_static();
        System.out.println("error");

        // 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패
        //C1.instance_instance();
        System.out.println("error");
	}
}

그리고 그 결과는 위와 같습니다.

이번 레터를 통해 메서드가 값을 return하는 방식에 대해 알아보았습니다.

다음 편에서는 메서드를 호출하는 방법에 대해 알아보겠습니다.

728x90
반응형

댓글