함수와 메소드의 차이
함수랑 메소드가 같은게 아니라고?
내가 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에서 구현된 모든 함수는 메소드라고 볼 수 있다. 또한 메소드는 객체 내부의 필드에 접근하는 게 가능하다는 특징도 존재한다.
요약
- 함수는 메소드를 포함한다. (메소드 ⊂ 함수)
- 함수는 객체로부터 독립적일 수도 있고 종속적일 수도 있다. 반면 메소드는 객체에 종속적이다.
- 메소드는 객체 내부의 필드에 접근하는 게 가능하다.
정리하며
사실 그동안 함수와 메소드가 다른 건 줄도 모르고 그냥 함수라고 불렀었는데, 이번에 CS 공부를 하면서 함수와 메소드가 다른 것이라는 사실을 알게 되었다. 앞으로는 좀 더 명확히 구분 짓고 사용해야 할 것 같다.