메서드

작업단위로 문장들을 묶은 것 

값(입력)을 받아서 처리하고, 결과를 반환(출력) 

지금까지 사용해온 println(), random()도 메서드이다

 

메서드의 장점

코드의 중복을 줄일 수 있음 

코드의 관리가 쉬움

코드 재사용 가능

코드가 간결해서 이해하기 쉬움

 

메서드의 작성

반복적으로 수행되는 여러 문장을 메서드로 작성

하나의 메서드는 한가지 기능만 수행하도록 작성

 

메서드 = 선언부 + 구현부 

반환타입 메서드 이름  (타입 변수명, 타입 변수명...)          // 선언부

{

    // 메서드 호출시 수행될 코드                                          // 구현부

}

int add(int a, int b)           // 선언부
{
	int result = a+b;
    return result; // 호출한 메서드로 결과를 반환
}                                //구현부

 

반환타입

반환타입이 void가 아닐 때 return 뒤에 반환 값을 반드시 작성해야 한다.

반환타입과 return 뒤의 값의 타입이 일치해야 한다.

 

지역변수

메서드 내에 선언된 변수들은 그 메서드 내에서만 사용 할 수 있다.

따라서 서로 다른 메서드라면 같은 이름의 변수를 선언해도 된다.

int add(int x, int y) {
	int result = x + y;
 	 return result;
}

int multiply(int x, int y) {
	int result = x * y;
  	 return result;
}    
//위에 정의된 메서드 add와 multiply에 각기 선언된 변수 x, y, result는 
//이름만 같을 뿐 서로 다른 변수이다. (지역 변수)

 

인스턴스 메서드

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

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

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

 

static 메서드 (클래스 메서드)

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

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

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

public class MyMathTest2 {
    public static void main (String args[]) {
        System.out.println(MyMath2.add(200L, 100L)); //클래스 메서드 호출(바로 호출가능)
        MyMath2 mm = new MyMath2();                  //객체생성
        mm.a = 200L;
        mm.b = 100L;
        System.out.println(mm.add());                // 인스턴스메서드 호출 (객체가 필요)
    }
}

class MyMath2{
    long a,b;                           //인스턴스 변수 
    
    long add() {                        // 인스턴스 메서드
        return a+b;  
    }
    
    static long add(long a, long b) {    // 클래스 메서드 
        return a+b;                      // long a, long b 는 지역변수 
    }
}

 

static 클래스 사용

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

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

 

메서드 간의 호출과 참조

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

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

 

class TestClass {

    void instanceMethod() {}       // 인스턴스메서드
    static void staticMethod() {} // static메서드
    
    void instanceMethod2() {       // 인스턴스메서드
    	instanceMethod();          // 다른 인스턴스 메서드를 호출
        staticMethod();            // static메서드도 호출가능 
        }
        
	
    static void staticMethod2() {  // static메서드
    	instanceMethod();          // 에러! static에선 인스턴스 변수 사용못함
        staticMethod();            // static메서드는 호출가능
        }
}