Post

[Java] 06. 함수와 메서드

[Java] 06. 함수와 메서드

함수는 어떤 값을 넣으면 어떤 값이 나온다는건 수학으로도 충분히 알고있는 내용입니다
하지만 프로그래밍에 넣는 함수는 느낌이 조금 다르니 사용하면서 차이를 생각해보는게 좋겠습니다

일단 수학에서는 f(x) = ... 또는 y = ...라는 형태로 함수를 사용했었죠?
프로그래밍에서도 마찬가지로 어떤 값을 넣으면 계산이 끝난 값이 출력되기 마련입니다



1. 함수를 호출하고 값 받아내기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class FunctionClass {
    
    public static int add(int n1, int n2) {
        // return n1 + n2;로 작성해도 됨
        int result = n1 + n2;
        return result;
    }
    
    public static void main(String[] args) {
        int x = 10, y = 20;
        int sum = add(x, y);
        
        System.out.println(sum);    // 30 출력
    }
}

함수 또는 후술할 메서드의 괄호 안에 사용되는 변수는 ‘매개변수’라고 부릅니다

add(n1, n2)라는 함수를 새로 작성했습니다
아직은 publicstatic을 사용하는 이유는 모르니 넘어가고.. int는 반환 타입, add는 함수명이 되겠습니다

즉, add라는 함수를 사용하면 어떤 값이 int로 반환된다는 것이겠죠

또한, 괄호에 작성한 int n1, int n2에 작성하는 변수명은 신경써야 할 필요가 없습니다
main에 작성한 add(x, y)를 보면 ‘add’ 함수의 n1과 n2에 각각 값이 10, 20이 들어가게 되는 것이죠


2. 메서드 사용

메서드는 클래스 내부에 구현되는 함수입니다

저희가 위에서 함수를 사용하기 위해, 정의만 하고 sum을 작성하였습니다

하지만 메서드는 클래스를 불러와야 하는 점에서 함수와 차이점이 있습니다
바로 예제를 보도록 합시다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/** FunctionClass **/
public class FunctionClass {
    public int add(int n1, int n2) {
        // return n1 + n2;로 작성해도 됨
        int result = n1 + n2;
        return result;
    }
}

/** MethodClass **/
public class MethodClass {
    public static void main(String[] args) {
        FunctionClass f = new FunctionClass();  // 인스턴스 생성
        System.out.println(f.add(10, 20));      // 30 출력
    }
}

지금은 모르는 내용이니 <[클래스명] [인스턴스명] = new [클래스명];>으로 만든다고 생각하며 넘어갑시다

‘FunctionClass’를 수정하고 새 클래스 ‘MethodClass’를 만든 뒤 main을 실행시키면 30이 출력됩니다
여기서 ‘add’ 함수를 사용하고 싶다면 ‘FunctionClass’라는 클래스를 불러와서 인스턴스 생성을 해야되는 것이죠

만약 처음 함수 예제에서 ‘static’을 지운다면, ‘FunctionClass’에 main이 있더라도 인스턴스를 생성해야 합니다


2-2. 함수와 메서드를 사용하는 경우

함수는 위에서 단순히 계산을 하는 것 처럼, 보통 범용적으로 쓰이는 경우에 작성됩니다
하지만 메서드는 클래스에서 작동되어야 하는 느낌이 강합니다

예를 들어 사람의 정보(나이, 키, 성별 등)가 들어있는 “person” 클래스가 있고
이 클래스에서 해당 인원의 정보를 출력해주는 함수를 만들 경우, 이 함수는 메서드가 되는 것입니다


‘인스턴스’ 때문에 내용이 헷갈릴 수 있으니 다음 글에서 정리하여 작성하도록 하겠습니다

This post is licensed under CC BY 4.0 by the author.