이 포스팅의 내용은 글의 제목과 같이 자바의 메서드와 오버로딩이다.
C++과 자바에서 다르게 부르는 용어가 있다.
c++ | java |
변수 | 필드 |
함수 | 메서드 |
즉 c++의 변수를 필드, 함수를 메서드라고 한다.
함수와 오버로딩에 관해서 설명할것이다.
이미 C++문법을 어느정도 숙지했기에 자바의 제어문(if-else, for문)은 쉽게 넘어갈수있었다.
1. 메서드
메서드 사용의 장점은
1) 코드의 재사용이 가능하고
2) 가독성을 높일 수 있다.
예시 코드를 보면
public class exer1 {
public static void main(String[] args) {
isSame(12,34);
isSame(12,12);
}
static void isSame(int x,int y) {
if(x==y) {
System.out.println("두 수는 같습니다.");
return;
}
System.out.println("두 수는 다릅니다.");
}
}
C++에서 보았던 함수와 같음을 알수있습니다.
차이가 있다면
=> main에서 메서드를 호출해야할경우 꼭 static으로 정의되어야 한다는 점입니다.
같은 class에 있다고 해도 main에서 메서드를 인식하도록 하기위해서는 static을 붙여주어야합니다.
Pass By Value(Call By Value) [ 값에 의한 전달]
예시 코드 :
package exer;
public class exer1 {
public static void main(String[] args) {
int x = 0;
System.out.println("메서드 호출 전 x = " + x);
incre(x);
System.out.println("메서드 호출 후 x = " + x);
}
static void incre(int x) {
x++;
System.out.println("메서드 끝날 때 x = " + x);
}
}
의 출력 결과는 아래 사진과 같다.
처음 0 으로 초기화 해준후 메서드를 호출해주면 메서드 안에서 x의 값이 1이 증가한다.
그러나 메서드가 끝나면 처음 초기화 해준 값인 0이 출력된다.
메서드 안에서만 1이 된것이기 때문이다.
이것을 call by value라고 한다. - 메서드 호출에서는 값전달한다.
2. 메서드 오버로딩
1) 메서드 시그니처
-> 메서드 이름, 매개변수의 개수, 데이터 타입, 순서를 의미
2) 메서드 오버로딩
-> 메서드의 이름은 같지만 메서드 시그니처가 다른 메서드를 정의하는것
예시 코드 :
public static int max(int n1, int n2){
int result = n1>n2 ? n1 : n2;
return result;
}
public static double max(double n1, double n2){
double result = n1>n2 ? n1 : n2;
return result;
}
-> 두 메서드는 max라는 이름은 동일하지만 int 와 double로 데이터 타입이 다른 것을 확인할수있다.
이는 main에서 어떤 인수로 호출하느냐에따라 데이터 타입에 맞은 메서드를 호출한다.
이것을 메서드 오버로딩이라고 한다.
+) 제어문을 공부하며 잠시 잊어버렸던 삼항 연산자를 볼수있었다.
System.out.println(num%2==0 ? "짝수" : "홀수");
이처럼 출력문 안에도 쓸수있다.
A조건 ? B : C
이식이 의미하는 것은 A조건이 참이라면 B를 수행하고 거짓이라면 C를 수행하는 것이다.
'프로그래밍 > JAVA' 카테고리의 다른 글
java - 문자열[==,!=,compareTo, equals](6) (0) | 2021.08.23 |
---|---|
자바 - 정적멤버[static](5) (0) | 2021.08.21 |
자바 - this, this메서드(4) (0) | 2021.08.21 |
자바 - [객체지향프로그래밍]-생성자와 생성자 오버로딩(3) (0) | 2021.07.28 |
자바 기본 입출력[printf, println, scanner연산자](1) (0) | 2021.07.25 |