메소드와 함수의 차이

gunggme·2024년 3월 29일

CS

목록 보기
4/4
post-thumbnail

네 저 구분 못합니다

솔직히 이때 동안 구분할 필요 없이, 그냥 함수로 통일해서 부르고 있었다. 그런데, 이런식으로 무시당해서 한번 제대로 생각할겸 써보기로 했다.

함수란?

함수는 특정 기능을 수행하는 친구다. 우리는 이 함수를 이용해서 기능들을 제작하게 되는데, 한번 예시로 의사코드를 봐보자면.

fun Add(int a, int b)
{
	return a + b;
}

main()
{
	int a = 10;
    int b = 15;
    print(Add(a + b);
}

이런식으로 기능을 수행하는 친구를 함수라고 이야기하는데, 캐릭터를 움직이는 함수나, 애니메이션을 출력하는 함수가 있을것이다. 또는 소요시간을 측정하는것도 함수가 될 수 있는데, 함수는 어떤 걸 반복적으로 하면 그것이 함수가 될 수 있다.

그렇다면 메소드는?

사실 메소드도 함수와 다르지 않다. 나도 사실 함수 = 메소드인줄 알았으나, 다르다는걸 알게되었는데, 메소드는 클래스(class) 또는 객체(Object)와 연관되어 실행되는 함수를 이야기한다. 예시로 의사코드를 다시 보면

abstract class Animal
{
	public virtual void Bark();
}

class Dog : Animal
{
	public override void Bark()
    {
    	print("멍멍");
    }
}

main()
{
	Dog dog = new Dog();
    dog.Bark(); // 멍멍
}

이런식으로 클래스와 연관이 되는 함수를 메소드라고 한다.

분명 함수와 메소드는 다르다고 했는데?

다른거는 맞지만, 사실 같다고도 할 수 있을것 같다. 이 이유는 공통적으로 어떤 기능을 실행하는 것이라고 부르기도 하지만, 다음과 같이 정리 할 수 있다

함수메소드
전역에서 실행이 가능클래스에서 독립적으로 사용 가능
객체에 상관 없음인스턴스가 생성되야 함

사실 이런 차이점이 있다긴 하지만, 사실은 메서드는 함수의 집합 이라고 할 수 있다. 사실 둘다 구분지어 하는건 왜 하는건지 아직도 이해가 안된다. 나도 사실 C에선 함수 java에선 메소드라고 부른다고 전에 배웠던 기억이 있고, 스택오버플로우에서도 이야기를 했었는데, C++독스에서도 사실은 함수와 메소드를 나눠 이야기를 하지 않고 이야기를 한다. 그리고 레딧에서도 이야기가 나오는데, 함수와 메소드는 같다고 이야기 하는 사람도 있는 반면 다르다고는 하지만, 클래스안에 있는 함수를 메서드라 부르기는 하지만, "왜" 나눠 부르는지는 이야기를 안해준다.

그렇다면 결론은?

결론은 사실 메소드와 함수를 굳이 따로 나누지 않고, 부르기 편한대로 부르는게 맞다고 생각한다. 왜 나눠 이야기를 하는지는 모르겠지만, "왜 따로 부르는가"를 알고 싶다. 이 이유를 찾아봐도, 자료가 많이 보이지 않는다. 다들 클래스의 함수와 전역 함수의 차이라고만 이야기를 하고, 이유는 이야기해주지 않는다. 전역에서 실행되는 static 함수? 메서드? 는 왜 빼고 생각하라는건지도 이해를 못하겠다. 사회적 통념이라고 해도, 그냥 같게 불러도 상관 없을 것 같다고 생각된다.

profile
안녕하세요!

0개의 댓글