프로그래밍/JAVA

자바 - JAVA [메서드,오버로딩](2)

개발자 덕구🐾 2021. 7. 26. 14:06
728x90

이 포스팅의 내용은 글의 제목과 같이 자바의 메서드오버로딩이다.

 

 

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라는 이름은 동일하지만 intdouble로 데이터 타입이 다른 것을 확인할수있다.

이는 main에서 어떤 인수로 호출하느냐에따라 데이터 타입에 맞은 메서드를 호출한다.

이것을 메서드 오버로딩이라고 한다.

 

 

 

 

 


 

+) 제어문을 공부하며 잠시 잊어버렸던 삼항 연산자를 볼수있었다.

System.out.println(num%2==0 ? "짝수" : "홀수");

 

이처럼 출력문 안에도 쓸수있다.

A조건 ? B : C 

이식이 의미하는 것은 A조건이 참이라면 B를 수행하고 거짓이라면 C를 수행하는 것이다.

 

 

 

반응형