JUST GO

[공통] 메서드 본문

Java/학습내용

[공통] 메서드

root_go 2022. 10. 11. 11:57

메서드

  • 명명법 : 카멜 케이스
  • 메서드(Method)는 클래스 내에 소속되어 있으며 실행(호출, Call) 가능한 멤버 중 하나이다.
  • 구조
[접근 제한자] [synchronized]? [static|abstract]? [final]? [반환 타입|void] [메서드 이름]([매개 변수 구조,...]?) [throws [가능 예외,...]]? {
	[구현부]
}
  • [접근 제한자] : 해당 메서드에 접근할 수 있는 대상을 제한한다. '[공통] Java' 파일 참고.
  • synchronized : 해당 메서드에 한 번에 하나의 스레드가 가진 실행점만 존재할 수 있다는 의미. (과장한테 배우기)
  • static : 해당 메서드가 정적임. 비정적 메서드의 경우 해당 키워드 생략.
  • abstract : 해당 메서드가 추상적임. 비추상적 메서드의 경우 해당 키워드 생략. 추상적인 메서드의 경우 구현부({,})가 없음. 추상적이면서 정적이거나 최종적일 수 없음.
  • final : 해당 메서드가 최정적임. 최종적이지 않은 메서드의 경우 해당 키워드 생략.  최종적인 메서드의 경우 재정의(Overriding) 할 수 없음. 최종적이면서 추상적일 수 없음.
  • throws ... : 해당 메서드가 후술하는 한 개 이상의 예외를 던질 가능성이 있음을 알리며 해당 메서드를 호출하는 컨텍스트에서는 해당 예외(들)에 대해 대비가 되어 있어야 함. 가령, try-catch 로 감싸거나, 호출부 컨텍스트 자체가 다시 throws 해야 함.
public static void main(String[] args){
}
  • 위 main 메서드에 대한 설명
    • 위 main 메서드의 접근 제한자public 이다.
    • 위 main 메서드는 synchronized 이지 않다.
    • 위 main 메서드는 static이다.
    • 위 main 메서드는 final 이지 않다.
    • 위 main 메서드의 반환  타입은 없(void)다.
    • 위 main 메서드의 이름은 당연히 main이다.
    • 위 main 메서드의 매개 변수String[] 타입 한 개 이다.
  • 호출(Call) : 메서드를 실행하는 것을 '메서드를 호출한다.'라고 한다.
    • 메서드를 호출하기 위해 해당 메서드가 멤버로 존재하는 형(타입)이나 객체에 멤버 연산자로 접근하여 메서드 이름을 적은 뒤 괄호를 열어 전달 인자(Agrument)를 기입, 괄호를 닫으면 메서드를 호출하는 것이다.
    • 단, 동일한 스코프({,})내 존재하는 메서드를 호출하는 경우 멤버 연산자 및 이의 좌항을 생략할 수 있다.
  • 재귀호출(Recursive Call) : 호출된 메서드가 본 메서드의 동일한 절차(Procedure)를 다시 실행하기 위해 스스로를 호출하는 것.
[형이나 객체].[메서드 이름]([전달 인자,...]?);
System.out.println("Hello World");
  • 위 예제에 대한 설명
    • 위 예에서 System의 멤버인 out의 멤버인 메서드 println을 호출한 것이며 전달 인자로는 문자열 한 개를 전달한 것이다.
    • 전달할 전달 인자가 없다하더라도 괄호를 생략하여서는 안 되며 단순히 괄호를 열고 닫음으로 메서드를 호출할 수 있다.
    • 메서드가 요구하는 매개변수(Parameter)의 구조와 전달인자(Argument)가 일치해야만 메서드를 호출할 수 있다.
    • 메서드의 반환 타입이 있는 경우(void 가 아닌 경우) 모든 경우에 반드시 return 키워드를 이용하여 값을 반환해주어야 한다.
    • 메서드의 반환 타입이 없는 경우 return 키워드 뒤에 값이 올 수는 없지만 사용할 수는 있고, return시, 해당 메서드의 실행을 즉시 종료한다.
public class Main {
    public static void main(String[] args) {
        System.out.println(sum(3, 2)); // 3, 2는 전달 인자
    }
    public static int sum(int a, int b){ // 매개변수(타입/이름)
        if( a > b ) {
            return a + b;
        } else {
            return 0;
        }
    }
}
  • 위 예제에 대한 설명
    • 접근 제한자가 public 이다.
    • 정적이다.
    • 반환 타입이 int 이다.
    • 이름은 'sum'이다.
    • 매개 변수로 int 두 개(a와 b)를 전달 받는다.
    • 반환 값은 전달 받은 매개 변수 두개의 합이다.
  • 오버로딩(Overloading) : 오버로딩은 '과적'이라는 의미로, 이름이 같은 메서드의 매개변수 구조를 달리하여 두 개 이상 선언하는 것을 의미한다. 오버로딩된 메서드 호출 시, 호출부의 전달인자가 매개변수의 구조와 가장 잘 맞아 떨어지는 메서드를 호출하게 된다. (특히 상속 관계에 있는 서로 다른 두 매개변수의 경우)
public class Overloading {
    public static void main(String[] args) throws Exception{
        System.out.println(sum(1, 2, 3));
    }

    public static int sum(int a, int b){
        System.out.println("매개변수 두개짜리");
        return a + b;
    }

    public static int sum(int a, int b, int c){
        System.out.println("매개변수 세개짜리");
        return a + b + c;
    }
}
  • 재정의(Overriding) : 부모가 가진 메서드를 다시 만드는 것으로, 그 기능이나 목적을 달리하고자 할 때 사용한다. @Override 어노테이션(Annotation)을 메서드 앞에 적어주는 것이 좋다.
  • 추상 메서드(Abstract Method) : 추상 메서드는 구현부를 가지지 않는 메서드이다. 추상 메서드를 한 개 이상 가지는 클래스는 반드시 추상 클래스(Abstract Class)여야 하며, 이를 상속 받는 추상적이지 않은 클래스는 추상 클래스가 가지는 추상 메서드를 재정의하여 구현부를 반드시 구현해야 한다.
  • 가변인자(Variable Argument) : 그 개수가 정해지지 않은 어떠한 타입에 대한 매개변수이다. 매개변수 구조상 하나만, 마지막에 사용할 수 있다. 메서드 구현부에서의 취급은 일반 배열과 동일하다. 가령, int...는 int[] 과 동일하게 대우한다. 단, 전달인자를 하나도 전달하지 않아도 호출이 되며, 길이가 0인 배열로 취급됨으로 이에 유의한다.
 
public static void main(String[] args) throws Throwable {
    System.out.println(sum());
} 

public static int sum(int... nums){
    int sum = 0;
    for (int num : nums) {
        sum += num;
    }
    return sum;
}

'Java > 학습내용' 카테고리의 다른 글

[공통] 연산자  (0) 2022.10.12
[공통] 타입  (0) 2022.10.11
[공통] 변수와 상수  (0) 2022.10.11
[공통] 클래스  (0) 2022.10.11
[공통] Java  (1) 2022.10.11