메서드와 함수는 비슷하지만 중요한 차이점이 있다.
구분 | 함수 | 메서드 |
---|---|---|
소속 | 독립적 | 클래스에 종속 |
접근방식 | 직접 호출 | 객체를 통해 호출 |
데이터 접근 | 매개변수로만 | 객체의 필드 접근 가능 |
사용 패러다임 | 절차적 프로그래밍 함수형 프로그래밍 |
객체지향 프로그래밍 |
하지만 자바에서 함수는 모두 클래스 내부에서만 정의할 수 있기때문에 함수 = 메서드다. 이건 예외가 없다. 기본적으로 자바는 모든 코드가 클래스 내부에서 정의되기 때문에 독립적으로 존재하는 함수가 없다.
이것은 자바가 기본적으로 객체지향 프로그래밍을 따르기 때문이다. 객체지향의 핵심은 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위(객체)로 묶는 것과 이를 통해 데이터와 기능이 서로 연관되어 응집도를 높이는 것인데 자바는 클래스를 강제함으로써 이를 어느정도 강제하게 된다. 즉 클래스 밖에 함수를 독립적으로 마구 만들어서 코드와 데이터들이 파편화되는 것을 막는다. 즉 클래스안에서만 코드를 사용할 수 있다는 것은 이런 원칙을 지키기 위한 규칙인 것이다.
// 자바: 반드시 클래스 안에 메서드로 정의해야 함
public class Calculator {
// 독립적인 함수 정의 불가능, 반드시 클래스 안에 메서드로 정의
public int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(1, 2)); // 3
}
}
반대로 언어 자체가 멀티 패러다임을 따르는 자바스크립트의 경우 이런 원칙을 지키지 않는다. 기본적으로 절차지향, 객체지향, 함수형 패러다임을 모두 자유롭게 사용할 수 있는 자유로운 언어라 특별히 형식에 얽매이지 않는다. 때문에 자바스크립트의 함수는 독립적으로도 사용이 가능하지만 이 함수가 클래스 내부에도 있을 수 있고 이 경우엔 메서드라고 칭한다.
// 자바스크립트: 함수를 독립적으로 정의 가능
function add(a, b) {
return a + b;
}
// 자바스크립트: 클래스 안에도 정의 가능
class Calculator {
add(a, b) {
return a + b;
}
}
// 사용
console.log(add(1, 2)); // 3
const calc = new Calculator();
console.log(calc.add(1, 2)); // 3
주요 특징 비교
메서드
- 클래스/객체에 종속
- 객체의 상태(필드) 변경 가능
- this 키워드 사용 가능
- 클래스 내부의 인스턴스에서 사용된 this는 해당 인스턴스를 의미한다. 즉, 자기 자신이다.
- 접근 제어자 사용 가능
함수
- 독립적으로 존재
- 순수하게 입력값으로만 동작
- 전역 변수에만 접근 가능
- 접근 제어 없음
'Java > 자바 학습' 카테고리의 다른 글
자바의 예외 처리 (0) | 2025.05.07 |
---|---|
자바 접근 제어자 (0) | 2025.05.01 |
클래스의 final (0) | 2025.05.01 |
자바의 클래스(Class) (0) | 2025.05.01 |
자바의 주요 메서드 (0) | 2025.04.30 |