티스토리 뷰

 

내 질문:

메서드와 함수는 엄밀히 말하면 다른 개념 아냐?

아니면 함수가 큰 개념이고 그 안에 메서드가 있는 건가? 아니면 반대인가?

자바를 공부하고 있는데 클래스의 메서드 얘기를 해서.

근데 그걸 함수라고만 보기엔 둘이 약간 개념이 다른 거 같아서.

알기 쉽게 설명해주고 비교 분석해줄래?

 

 

맞아. 엄밀히 말하면 함수와 메서드는 다른 개념이야.
다만 큰 범주로 보면 보통은 이렇게 이해하면 가장 깔끔해.

함수는 더 넓은 개념이고, 메서드는 객체나 클래스에 소속된 함수다.

즉 자바를 기준으로는:

자바에는 독립적인 “함수”가 없고, 클래스 안에 정의되는 “메서드”만 있다.


1. 함수란?

함수는 일반적으로 입력을 받아 어떤 작업을 하고 결과를 반환할 수 있는 코드 묶음이야.

예를 들어 개념적으로는 이런 느낌이야.

 
add(3, 5) → 8
 

즉 함수는 보통 이런 특징을 가져.

 
반환값 = 함수이름(입력값);
 

수학의 함수처럼 생각하면 쉬워.

f(x) = x + 1
 

프로그래밍에서는 이걸 코드로 만든 것이 함수야.


2. 메서드란?

메서드는 클래스 또는 객체에 소속된 함수야.

자바에서는 메서드를 반드시 클래스 안에 작성해.

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

여기서 add는 함수처럼 동작하지만, 자바에서는 정확히 메서드라고 부르는 게 맞아.

왜냐하면 add가 혼자 존재하는 게 아니라 Calculator 클래스 안에 소속되어 있기 때문이야.

 
Calculator calc = new Calculator();
int result = calc.add(3, 5);
 

여기서 calc.add(3, 5)는 “calc라는 객체에게 add라는 동작을 시킨다”는 의미야.


3. 함수와 메서드의 핵심 차이

                 구분                                              함수                                                                   메서드
소속 독립적으로 존재 가능 클래스나 객체에 소속됨
호출 방식 add(3, 5) calc.add(3, 5) 또는 Math.max(3, 5)
객체와의 관계 객체가 없어도 가능 객체나 클래스와 관련됨
상태 접근 보통 외부 상태와 독립적 객체의 필드에 접근 가능
자바에서의 존재 독립 함수 없음 모든 함수형 코드가 메서드 형태

4. 자바에서는 왜 “함수”보다 “메서드”라고 부를까?

자바는 객체지향 언어라서 코드가 기본적으로 클래스 안에 들어가야 해.

예를 들어 C나 JavaScript 같은 언어에서는 이런 독립 함수가 가능해.

 
function add(a, b) {
    return a + b;
}
 

호출도 이렇게 해.

 
add(3, 5);
 

그런데 자바에서는 이런 식으로 클래스 밖에 함수를 만들 수 없어.

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

이건 자바에서 불가능해.

반드시 이렇게 클래스 안에 있어야 해.

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

그래서 자바에서는 add를 함수라고 부르기보다는 메서드라고 부르는 게 더 정확해.


5. 그럼 static 메서드는 함수에 더 가까운 거 아냐?

좋은 포인트야. 맞아. static 메서드는 객체 없이 클래스 이름으로 호출하기 때문에 일반적인 함수와 꽤 비슷해 보여.

 
int result = Math.max(3, 5);
 

Math.max()는 객체를 만들지 않고 바로 호출하지?

 
Math.max(3, 5);
 

이런 static 메서드는 “독립 함수처럼” 느껴질 수 있어.

하지만 자바 문법상으로는 여전히 메서드야.

왜냐하면 max는 독립적으로 존재하는 게 아니라 Math 클래스에 소속되어 있기 때문이야.

Math.max()
↑    ↑
클래스 메서드
 

그래서 정리하면:

static 메서드 = 함수처럼 쓰이지만, 자바에서는 클래스에 소속된 메서드
 

6. 객체 메서드는 함수와 더 다르다

예를 들어 이런 클래스가 있다고 해보자.

 
class Person {
    String name;

    void sayHello() {
        System.out.println("안녕, 나는 " + name);
    }
}
 

이 메서드는 단순히 입력값만 받아 계산하는 함수가 아니야.

 
Person p = new Person();
p.name = "롤리";
p.sayHello();
 

sayHello()는 매개변수를 안 받지만, 객체 내부의 name 필드를 사용해.

즉 메서드는 자신이 속한 객체의 상태를 사용할 수 있어.

함수: 입력값을 받아서 처리하는 독립적인 코드 묶음
메서드: 객체나 클래스에 소속되어 그 객체의 상태와 동작을 다루는 코드 묶음
 

7. 비유로 이해하기

함수는 그냥 “기계”라고 보면 돼.

숫자 3과 5를 넣으면 8이 나오는 더하기 기계
 

메서드는 “어떤 물건이나 사람에게 딸린 기능”에 가까워.

계산기의 add 기능
사람의 sayHello 기능
문자열의 length 기능
자동차의 drive 기능
 

예를 들어 자바에서 문자열 길이를 구할 때:

 
String text = "hello";
int len = text.length();
 

length()는 그냥 독립 함수가 아니라, text라는 문자열 객체에 소속된 동작이야.

그래서 메서드야.


8. 최종 정리

가장 정확한 관계는 이거야.

함수: 더 넓은 개념
메서드: 클래스나 객체에 소속된 함수
 

자바 기준으로는 이렇게 기억하면 돼.

자바에서는 클래스 밖에 독립 함수가 없다.
자바에서 함수처럼 보이는 것은 대부분 메서드다.
메서드는 클래스 또는 객체에 소속된 함수다.
 

그래서 누가 자바에서 main 함수라고 말하면 일상적으로는 알아들을 수 있지만, 엄밀하게는 main 메서드가 맞아.

 
public static void main(String[] args) {
}
 

이건 main 함수가 아니라 main 메서드야.
왜냐하면 반드시 어떤 클래스 안에 들어가기 때문이야.

 

 

 

By. ChatGPT