함수(Function),프로사저(Procedure), 서브 루틴(Sub Routine)...
코드의 집합
같은 목적을 가진 코드의 집합
코드 재사용의 단위(****)
메서드 헤더(header), Signature(서명)
접근지정자 정적키워드 반환타입 메서드 이름 인자리스트
public static void hello ()
몸통(Body), 구현부
{코드;}
public static void hello() {
//구현부 > 메서드가 하려는 업무
System.out.println("안녕하세요");
}
아래와 같은 말
파라미터(Parameters)
인자(Argument)
매개변수
: 이 매개변수는 선언된 메소드 안에서만 사용할 수 있고, 다른 메소드에서는 사용할 수 없는 로컬변수!
public static void checkScore(int kor, int eng, int math) {
int total = kor + eng + math; //총점
double avg = total / 3.0;
String resultString = avg >= 60 ? "합격" : "불합격";
System.out.printf("평균 점수 %.1f점은 %s입니다.\n",avg,resultString);
}
//함수 호출하기
checkScore(100, 90, 80);
: void == 없다 == null
: 반환 타입 설정하면 무조건 같은 자료형으로 반환 해줘여 함!
public static int getNum() {
int num = 100;
return num ;
// 메서드 종료 + 값 반환 => return 밑에 코드는 실행 될 수 없음.
//System.out.println("메서드 종료");
}
정적키워드와 접근지정자는 클래스 파트와 함께 보는 것이 좋음!
지시자(제어자) 중 하나
클래스 or 클래스 맴버에 붙이는 키워드
static이 붙은 멤버변수나 메소드는 클래스로부터 생성하지 않고, 클래스 이름을 통해 직접 접근할 수 있다!
=> 메모리를 효율적으로 사용 가능
✔ 모든 객체들이 동일한 값을 가지는 멤버변수가 있을 경우, static으로 선언!
: 예시 코드는 길어서 문제 풀이와 함께 보여드리겠습니당 !
클래스 or 클래스 멤버에 붙이는 키워드로써 외부에 어느 정도의 수준으로 노출할 건지 제어
1. public
2. private
3. protected
4. (default)
같은 이름의 메서드를 여러개 만드는 기술
메서드의 인자 리스트를 다양한 형태로 구성해서, 같은 이름의 메서드를 여러개 만드는 기술
메서드 만드는 중..
1. public static void test() {} //o
2. public static void test() {} //x, 1번 때문에
3. public static void test(int n) {} //o => 매개변수의 개수가 다름 => 즉 호출 하는 방법이 다르기 때문에 다른 메서드로 인정해줌
4. public static void test(int m) {} //x,3번 땜에 => 매개변수의 이름이 다르다고 메서드가 다른게 아님 => 매개 변수를 넘길 때 이름을 지정하고 넘기는 것이 아님
5. public static void test(int n, int m) {} //o
6. public static void test(String) {} //0 => 인자의 자료형이 다르니 때문에 가능
7. public static int test () {} //x,1번 땜에
재귀 구조를 가진 메서드
메서드 구현부에서 자기 자신을 호출하는 메서드
어렵다. > 머리속으로 상상하기 힘들다.
파일 디렉토리 구조 or 트리 구조 > 많이 사용
//main
//팩토리얼 예제
//요구사항] 팩토리얼 메서드를 구현하시오.
int n = 4;
int result = factorial(n);
System.out.printf("%d! = %d\n", n, result);
//method
public static int factorial(int n) {
return (n==1) ? 1 : n * factorial(n-1);
}
public static void m1() { //재귀 매서드
System.out.println("메서드1");
m1(); //재귀호출
}