• 어떠한 작업을 수행하기 위한 명령문의 집합
  • 주로 어떤 값을 입력받아서 수행 후 그 결과를 돌려준다.
  • 입력받는 값이 없을 수도 결과를 반환하지 않을수도 있다.
  • 반복적으로 수행되는 코드를 줄이기 위해서 사용한다.

메서드 작성

반환타입 메서드명(변수타입 변수명,...){	//매개변수 개수가 많다 -> 참조변수나 배열사용
	수행될 문장
	return 반환값;
}
//순서: 매개변수? -> 수행문장? -> 반환유무? -> 메소드명의 반환타입 결정
int add(int a, int b){	//★ 메소드명앞에 반환타입, ★변수타입과 갯수
	int rusult = a + b; //수행될 문장
	return result;
}
  • 메서드의 선언부는 후에 변경사항이 발생하지 않도록 주의
    • 변경시, 그 메서드가 호출되는 모든 곳이 함께 변경되어야하기 때문

return문

  • 메서드가 정상적으로 종료되는 경우
    • 메서드의 마지막 문장까지 실행된 경우
    • return문을 만났을 때 (switch-case문과 반복문의 break같은 아이)
      ★ 메소드 중괄호 닫힐때까지 안가고 반환값 돌려주고 바로 종료됨

반환값이 있는 경우

  • return 반환값; => 반환값과 반환타입의 타입은 일치해야 한다

반환값이 없는 경우

  • return;
  • 반환타입이 void가 되어야한다.
  • 생략가능 (중간에 return하는건 써줘야됨, 마지막에만 생략 가능)

메서드 호출

방법

클래스명.메서드명(인자);

int 변수명 = 클래스명.add(3,5); //반환값이 있는 경우

규칙

  • 인자의 개수와 순서 = 호출된 메서드에 선언된 매개변수
  • 인자의 타입: 매개변수의 타입과 일치 OR 자동 형변환이 가능한 것

순서

    1. 누구 친구세요?
    1. 원하는 입력값(매개변수)이 있으신가요?
    1. 반환값(리턴)이 있나요 -> 네 : 변수에 저장해서 쓰세요
  • ---------------------------------아뇨: 걍 호출만하세요

기본형 매개변수와 참조형 매개변수

  • 메서드가 호출되었을 때 매개변수로 지정한 값(인자값)을 메서드의 매개변수에 "복사"하여 넘겨준다.

기본형 매개변수

  • 단순히 만을 복사해 준다.
  • 변수의 값을 "읽기"만 할 수 있다.

참조형 매개변수

  • 인스턴스의 주소를 복사해 준다.
  • 변수의 값을 "읽기 또는 변경"이 가능하다
class Data{
	int x;
}

public class DataTest {
	public static void main(String[] args) {
              //1. Data클래스의 객체를 생성하여라. 변수명 d1
              Data d1 = new Data();
              //2. 참조변수 d1의 x값을 10으로 변경하여라.
              d1.x = 10;
              //3. 참조변수 d1의 x값을 출력하여라.
              System.out.println(d1.x); //10
              //4. 인자값으로 참조변수 d1의 x값을 가지는 change메서드를 호출하여라.
              change(d1.x); //출력: 1000
              //5. 참조변수 d1의 x값을 출력하여라.
              System.out.println(d1.x); //10
              
              //6. Data클래스의 객체를 생성하여라. 변수명 d2
              Data d2 = new Data();
              //7. 참조변수 d2의 x값을 10으로 변경하여라.
              d2.x = 10;
              //8. 참조변수 d2의 x값을 출력하여라.
              System.out.println(d1.x); //10
              //9. 인자값으로 참조변수 d2를 가지는 change메서드를 호출하여라.
              change(d2); //출력: 1000
              //10. 참조변수 d2의 x값을 출력하여라.
              System.out.println(); //1000
	}
   	 
	static void change(int x){
		x = 1000;
		System.out.println("change() 기본형 : " + x);
	}

	static void change(Data d1){
		d1.x = 1000;
        System.out.println("change() 참조형 : " + d1.x);
	}
    
}

재귀호출(Recursive Call)

  • 메서드 내에서 자기자신 메서드를 다시 호출하는 것
  • 호출한 메서드와는 관계없이 독립적인 작업을 수행
  • 무한반복 -> 조건문 필수

메서드의 종류

클래스메서드

  • 객체생성없이 '클래스명.메서드명()'
  • 인스턴스 멤버와 관련없는 작업을 수행 (p.110)
  • 클래스메서드 내에서는 인스턴트멤버를 사용할 수 없다.
  • 메서드 생성시 그 메서드 내에서 인스턴스멤버를 사용하지 않고 있다면 클래스메서드로 만드는 것을 고려해야한다.
    • 항상 클래스멤버들이 인스턴스멤버들보다 먼저 메모리에 올라간다
    • 클래스멤버가 로드된 시점에는 인스턴스 멤버들이 없다
    • 클래스멤버는 인스턴스 멤버를 호출할 수 없다.

인스턴스메서드

  • 인스턴스를 생성 후, '참조변수명.메서드명()'으로 호출
  • 인스턴스멤버와 관련된 작업을 주로 수행한다.
  • 클래스멤버와 관련된 작업을 수행할 수도 있다.
  • 인스턴스메서드 내에서는 '모든 멤버'를 호출할 수 있다.
profile
갈 길이 멀다

0개의 댓글