Computer_Language/Java

[Java] 6. 자바의 함수(메소드)와 오버로딩

Joo-Topia 2019. 12. 23. 19:05

이번 글은 자바의 함수에 대한 내용이다.

C언어에서는 불가능했던 오버로딩에 대한 개념도 같이 정리해봤다.

 

자바의 함수 정의


함수를 정의할때 보통 리턴 값의 자료형, 함수의 이름, 매개변수, 함수의 내용, 그리고 리턴 값이 정의된다. 물론 매개변수나 리턴 값이 없는 함수도 존재한다.

public static int new_func_2(int a, int b) {
    System.out.println("This is new_func_2");
    System.out.println("return a + b");
    return a + b;
}

간단한 덧셈 함수를 정의하는 예시이다. 코드 내부의 public과 static의 의미는 클래스를 공부하면서 따로 정리할 예정이다.

 

추가적으로 리턴값과 매개변수가 없는 함수를 정의하고 함수를 호출하는 예제 코드이다.

package project;

public class Main {
    public static void new_func_1() {
        System.out.println("This is new_func_1");
    }
    
    //main도 하나의 함수이다.
    public static void main(String[] args) {
        //리턴값이 없는 함수 호출
        new_func_1();
        
        int result;
        
        result = new_func_2(3, 4);
        System.out.println("new_func_2's return value : " + result);
        result = new_func_2(3, 4, 5);
        System.out.println("overriding new_func_2's return value : " + result);
    }
    
    //절차적 언어인 c언어와 다르게 main보다 나중에 함수를 선언해도 main문에서 함수를 사용할 수 있다.
    public static int new_func_2(int a, int b) {
        System.out.println("This is new_func_2");
        System.out.println("return a + b");
        return a + b;
    }

}

C언어와 다르게 코드의 흐름 상 main함수보다 나중에 선언된 "new_func_2"함수가 main에서 정상적으로 호출되는 것을 볼 수 있다. 간단하게 Main이라는 클래스 안에서 선언된 멤버 함수라고 생각할 수 있는데 이 내용도 클래스에서 따로 정리할 예정이다. Java와 C언어의 큰 차이점 중 하나이다.

자바의 오버로딩


오버로딩이란 함수의 이름은 동일하게 정의하고 매개변수 혹은 리턴 값만 변경하여 정의하는 기법을 의미한다. 오버라이딩 또한 절차 지향적 언어인 C언어와 객체지향 언어인 Java의 큰 차이점 중 하나이다. 후에 공부할 오버로딩과는 다른 기법이니 혼동하지 말고 첫 배움부터 확실하게 기억하는 게 좋다!

예제 코드와 결과를 보면 조금 더 이해가 빨리 될 것이다.

package project;

public class Main {
    public static void new_func_1() {
        System.out.println("This is new_func_1");
    }
    
    //main도 하나의 함수이다.
    public static void main(String[] args) {
        //리턴값이 없는 함수 호출
        new_func_1();
        
        int result;
        
        result = new_func_2(3, 4);
        System.out.println("new_func_2's return value : " + result);
        result = new_func_2(3, 4, 5);
        System.out.println("overloading new_func_2's return value : " + result);
    }
    
    //절차적 언어인 c언어와 다르게 main보다 나중에 함수를 선언해도 main문에서 함수를 사용할 수 있다.
    public static int new_func_2(int a, int b) {
        System.out.println("This is new_func_2");
        System.out.println("return a + b");
        return a + b;
    }
    
    //함수의 오버로딩 예시이다. 후에 공부할 오버라이딩과는 다른 개념이다.
    public static int new_func_2(int a, int b, int c) {
        System.out.println("This is overloading new_func_2");
        System.out.println("return a + b + c");
        return a + b + c;
    }

}

"new_func_2"라는 함수를 오버로딩을 통해 개수가 다른 입력에 대해 다른 동작을 하도록 정의를 하고 실행한 결과이다. 매개변수의 갯수가 달라지면 같은 이름을 가진 함수여도 동작이 달라지게 된다. 이러한 특성 덕분에 "String"클래스에서 "+(더하기)" 연산이 가능하기도 하고 그보다 더 많은 기능들이 가능하게 됐다.

 

*구름 edu의 "바로 실행해보면서 배우는 JAVA (자바)"을 수강 후 정리한 내용입니다.
소스코드는 깃허브 저장소를 참고! (Java언어 외 다양항 프로그래밍 예제도 볼 수 있다.)