Class04(메서드)
2022. 12. 28. 수업내용 정리
메서드
- 메서드(Method)는 클래스(Class)가 포함하는 멤버(Member) 중 하나로, 호출(Call) 가능한 단위이다.
- 메서드 명명은 카멜 케이스를 이용하고, 주로 동사혹은 동사 + 목적어의 형태를 가진다. 가령,
addUser
,deleteUser
와 같은 꼴. 단,to타입
과 같은 형식(가령toString
및toArray
등)을 가지기도 하고, 반환 타입이 논리형(boolean
)인 경우 3인칭 단수형의 동사를 이름(가령equals
및matches
등)으로 가지기도 한다. -
메서드의 명명에는 예외가 있을 수 있으나 카멜 케이스를 지키는 것에는 예외가 없다.
[접근 제한자] [static|abstract|final]? [반환 타입|void] [메서드 이름] ([매개 변수(Parameter),...]?) [throws [예외,...]?] { // ? 둘 중 하나가 오거나 안와도 된다는 의미.. // 구현부 }
static
: 메서드의 정적 여부.abstratic
: 메서드의 추상 여부.final
: 메서드의 최종 여부.void
: 메서드의 반환 타입이 없음을 의미함.throws
: 해당 메서드 호출 시 발생할 수 있는 예외(Exception) 한 개 이상을 명시한다. 해당 메서드를 호출하는 컨텍스트(Context)는 해당 예외에 대한 처리가 되어있어야 한다.- 메서드는 정적이면서 추상적이거나 최종일 수 없고, 추상적이면서 정적이거나 최종적일 수 없으며 최종적이면서 정적이거나 추상적 일 수 없다.(
static
,abstract
,final
중 하나 만 쓰라는 뜻) - 추상 메서드
abstract
키워드를 이용하여 추상적인 메서드를 선언할 수 있다.- 메서드가 추상적일 경우 구현부(
{
,}
)를 가지지 않아야 하며 세미콜론(;)으로 끝내야 한다. - 추상 메서드를 한 개 이상 포함하고 있는 클래스는 반드시 추상적이어야 한다.
public static void someAbstractMethod(); // 추상 메서드의 예
- 접근 제한자는
public
이다. - 정적이고(
static
) 추상적(abstratic
) 이지 않다. - 반환 타입이 없다(
void
). - 메서드의 이름은
main
이다. - 매개 변수는
String[]
타입의args
한 개가 있다.
반환
return
키워드는 어떠한 메서드의 반환 타입이 있을 때(void
가 아닐 때) 해당 메서드의 호출 결과를 반환(Return)해주기 위해 사용하는 키워드이다.return 반환값;
형식으로 사용한다.- 메서드의 반환 타입이 있는 경우(
void
가 아닐 때) 모든 경우의 수에서 반환 값을 반환하는 구문이 작성되어야만 한다. - 메서드의 반환 타입이 없을 때(
void
일 때)에도 사용할 수 있는데 단순히return;
로 사용할 수 있다. - 반환 값의 유무와 관계 없이
return
은 해당 메서드의 실행을 즉시 중단시킨다.
호출
- 메서드를 호출(Call)하기 위해서는 해당 메서드를 멤버로 가지고 있는 클래스(혹은 객체)에 접근하여 메서드 이름을 적고 괄호 안에 요구되는 매개 변수의 구조와 일치하는 전달 인자를 전달해야 한다.
재귀호출(Recursive Call)
- 재귀호출이란, 어떠한 메서드
x
의 구현부 내에 동일한 메서드x
를 호출하는 것을 의미한다.
오버로딩(Overloading)
- 메서드 오버로딩(Method Overloading)은 동일한 이름을 가지는 메서드 두 개 이상에 대해 매개변수 구조를 다르게하여 메서드를 정의하는 것이다.
가변인자(Variable Arguments)
- 어떠한 타입
T
에 대해서 정해지지 않은 개수의 인자를 전달 받기 위해 사용한다. 단, 0개의 인자도 허용함으로 유의한다. - 메서드 매개변수 구조 선언시 가변인자는 마지막에 한 개만 존재해야 한다.
- 가변인자
T...
는 실질적으로T
에 대한 배열(T[])로 인식됨으로 사용에 유의한다.public static int sum(int... nums) {...}
위 코드에서 가변인자
nums
는 사실 정수형 배열(int[]
)이다.
재정의(Override)
- 메서드 재정의(Override)는 상속 받고 있는 부모(몇 단계 부모인가는 상관 없음)가 가진 최종적이지 않은 메서드의 구현부를 새로 작성하는 것이다.
- 자식 타입에서 재정의된 메서드의 구현부는 부모 타입인 자식 객체를 가지는 변수를 통해 호출하더라도 재정의된 내용이 실행된다.
- 재정의 되기 전의 (원래) 메서드에 접근하는 방법은 재정의 메서드 구현부 내에서
super
키워드를 이용하는 방법 밖에 없다. - 메서드 재정의 시
@Override
어노테이션(Annotation)을 사용해야 한다.
댓글남기기