함수와 메소드의 차이

함수랑 메소드가 같은게 아니라고?

내가 JAVA를 주로 하면서 함수와 메소드를 구분해서 썼던 기억은 없었던 것으로 기억한다. 그랬으니 나는 당연히 함수와 메소드의 차이에 대해서도 잘 모르고 대충 뭉뚱그려서 전부 함수라고 불렀었다. 함수와 메소드를 구분 짓는 가장 큰 차이점은 '함수가 단독으로 존재하느냐, 아니면 클래스 내부에 포함되어 있느냐' 로 구별된다. 이제부터 두 개의 차이를 확실히 알아보도록 하겠다.


함수(Function)

함수는 특정 작업을 수행하는 코드조각이다

public int add(int a, int b) {
    return a + b;
}

public int sub(int a, int b) {
    return a - b;
}

함수는 특정한 작업을 수행하기만 하면 모두 함수로 취급된다. 위의 예시는 외부로부터 두 개의 int 값을 받아 더하거나 빼는 함수다. 함수를 먼저 설명한 이유는 메소드가 이 함수의 개념에 포함되기 때문이다.

메소드(Method)

반면 클래스에 포함되는 함수들은 특별히 메소드라고 부른다. 즉, 함수는 클래스에 포함될 수도 있고 아닐 수도 있다. 반면 메소드는 클래스에 포함되어 있는 함수만을 메소드라고 부를 수 있고, 이는 곧 메소드는 클래스에 종속적이라고 볼 수 있다. 이런 특성 때문에 메소드는 클래스 함수라고 불리기도 한다.

public class Calculator {
    private int a;
    private int b;
    
    public int add() {
    	return this.a + this.b;
    }
    
    public int sub() {
        return this.a - this.b;
    }
}

위의 예시는 계산기라는 클래스 내부에 a, b 라는 필드 변수가 존재하고, 더하기와 빼기 함수를 포함하고 있다. 함수 자체가 클래스에 종속적이기 때문에 이 두 함수는 메소드라고 부를 수 있다. JAVA는 기본적으로 클래스 기반의 언어다 보니, 모든 함수가 클래스에 포함되어 있기 때문에 JAVA에서 구현된 모든 함수는 메소드라고 볼 수 있다. 또한 메소드는 객체 내부의 필드에 접근하는 게 가능하다는 특징도 존재한다.

요약

  1. 함수는 메소드를 포함한다. (메소드 ⊂ 함수)
  2. 함수는 객체로부터 독립적일 수도 있고 종속적일 수도 있다. 반면 메소드는 객체에 종속적이다.
  3. 메소드는 객체 내부의 필드에 접근하는 게 가능하다.

정리하며

사실 그동안 함수와 메소드가 다른 건 줄도 모르고 그냥 함수라고 불렀었는데, 이번에 CS 공부를 하면서 함수와 메소드가 다른 것이라는 사실을 알게 되었다. 앞으로는 좀 더 명확히 구분 짓고 사용해야 할 것 같다.


참고한 문헌 및 블로그 글

함수(Function) VS 메소드(Method)
안녕하세요 :) Zedd입니다. 갑자기 Swift에서 함수와 메소드의 명칭..? 언제 함수라고 불러야하고 메소드라고 불러야하는지 제가 정확히 개념을 모르는 것 같아서 정리하려고해요 :) 함수(Function) VS 메소드(Met..
05-03 메소드 (Method)
다른 프로그래밍 언어에는 **함수**라는 것이 별도로 존재한다. 하지만 자바는 클래스를 떠나 존재하는 것은 있을 수 없기 때문에 자바의 함수는 따로 존재하지 않고 클래스 내 ...