메소드를 한 단어로 표현하자면 흔히 말하는 함수이다.
원하는 행동을 프로세스로 세분화해 저장하는 점과
사용에 선언과 호출의 동작이 필요하고
코드 간략화, 코드 가독성 때문에 사용된다는 부분까지 똑같다.
혹시 함수의 개념을 잘 모른다면 아래의 캡쳐본을 참고해주길 바란다.
함수와 메소드의 차이로는 선언된 부분으로
메소드는 클래스 내에서 정의된다는 것이다.
클래스 안에 있는 함수가 메소드라고 생각해도 좋다.
그럼 이제 자바의 메소드에 대해 알아보겠다.
- 메소드 정의
- 메소드 호출
- 메소드 오버로딩
메소드를 사용할려면 메소드가 있어야하니까 메소드를 만들어 보겠다.
- 메소드 정의
메소드는 아래와 같은 형식으로 정의한다.
접근제어자 (static) return type 메소드명(매개변수) { 실행코드; } |
접근제어자는 캡슐화의 개념인데 public일 때는 모두가 접근할 수 있다.
그리고 static은 전역으로 선언하고 싶을 때 사용하는 키워드이다.
여기서 알아야하는 것은 public static이 있어야 어디서든 자유롭게 호출이 가능하다는 것이다.
자세한 설명은 나중에 각 개념들을 알아보면서 설명하겠다.
그 이후는 함수와 같다.
return type, 함수명, 매개변수, 실행코드
아래의 예제를 통해 설명하겠다.
public static으로 어디서든 호출할 수 있도록 만들었다.
이 메소드는 integer 데이터를 반환한다.
이 메소드의 이름은 sum이고 2개의 매개변수를 가지고 있다.
sum 메소드는 2개의 데이터를 매개변수로 받아와 한 줄의 출력을 한뒤 매개변수의 합을 반환한다.
- 메소드 호출
위에서 메소드를 정의했다면 이번에는 메소드 사용을 해볼 것이다.
아래의 예제를 통해 설명하겠다.
메소드 명을 이용해 호출하고 메소드의 반환 값을 result에 저장한다.
그냥 함수라고 생각해도 무방할 정도로 똑같다.
하지만 만약 메소드 정의때 public static이 없었다면 sum은 위와 같이 호출 할 수 없다.
만약 public static이 없었다면 클래스 인스턴스를 생성해서 그 인스턴스 안에 있는 메소드를 사용해야한다.
여기서 왜 public static을 붙였냐면 메소드를 설명하기 위한 예제라서 다른 개념들을 배제했다.
- 메소드 오버로딩
메소드 오버로딩를 한줄로 정리하자면 같은 메소드 명을 공유하는 여러개의 메소드를 만드는 것이다.
물론 각각의 메소드는 모두 다르다.
메소드명이 같아도 매개변수의 개수, 매개변수의 데이터 타입이 다르면 다른 메소드로 구분된다.
아래의 예제를 통해 설명하겠다.
위의 예제에는 총 3개의 sum 메소드가 있다.
int sum(int a, int b)
int sum(int a, int b, int c)
int sum(int a, int b, double c)
각각 매개변수와 매개변수의 데이터 타입이 다르다.
아래의 실행 결과를 보면 sum 메소드 모두 정상적으로 정의와 호출이 되었다는걸 알 수 있다.
예제를 통해 메소드명이 같은데 어떻게 다른 메소드로 분류되는지 알았다.
그러면 메소드 오버로딩은 왜 있는 것일까?
어떠한 하나의 행동을 해야하는데
주어지는 도구가 2개일 때, 3개일 때, 아니면 도구4개가 주어졌을 때
어떠한 행동을 할 수 있는 방법이 다 다르다.
결과적으로 어떠한 행동이라는 큰 틀은 같지만 세세한 부분들이 다른 것이다.
이때 메소드명을 모두 다르게해야 한다면 무수히 많은 메소드명을 알고있어야
각 상황에 맞춰 쓸 수 있게된다.
이런 상황을 방지하고자 매개변수가 다르면 같은 메소드명을 사용할 수 있도록 한 것이다.
라면을 끓여야하는데 라면, 물, 냄비가 필요하다고 가정하자.
만약 라면, 물, 냄비가 주어졌을 때
라면, 냄비, 돈 이 주어졌을 때
돈만 주어졌을 때
라면을 끓이기 위해 필요한 과정이 다르다.
라면끓이기1(라면,물,냄비) { . . . }
라면끓이기2(라면,냄비,돈) { . . . }
라면끓이기3(돈) {. . .}
위의 방식이 아닌 아래의 방식을 사용하는 것이다.
라면끓이기(라면,물냄비) { . . . }
라면끓이기(라면,냄비,돈) { . . . }
라면끓이기(돈) { . . .}
메소드 오버로딩은 마치 이러한 상황에서 사용하기 위함이라고 생각해도 좋다.
'Java > Java 기초' 카테고리의 다른 글
[Java] 객체지향 언어 특징 (추상화 Abstraction) (0) | 2022.04.13 |
---|---|
[Java] 클래스 (Class) (0) | 2022.04.07 |
[Java] 사용자 입력 (Scanner) (0) | 2022.03.29 |
[Java] 연산자 (관계, 논리, 삼항) (0) | 2022.03.23 |
[Java] 연산자 (대입, 산술, 복합대입, 증감) (0) | 2022.03.22 |