메소드와 함수의 차이점은 무엇입니까?


1739

누군가 OOP 컨텍스트에서 메소드함수 에 대한 간단한 설명을 제공 할 수 있습니까 ?



12
속성의 값이 함수 때, 우리는 그것을 메소드를 호출
코더

2
방법의 반대는 무엇입니까? 그게 내 질문입니다. "함수"는 상위 개념입니다. 방법은 기능의 한 유형입니다. 메소드가 아니지만 이름으로 직접 호출 할 수있는 함수 유형의 이름은 무엇입니까?
Alexander Mills

r의 메소드와 함수의 차이점을 설명하는 다른 설명을 보는 것이 흥미로울 것 입니다. method는 일반적으로 function을 포함하므로 흥미 롭습니다 . 메소드가 객체 종속 함수 인 경우 객체 클래스에 대한 함수 검사는 if(class(object)) { ... } else {stop()}개념적으로 메소드와 동일합니까?
Konrad

적절한 용어는 실제로 언어에 따라 달라질 수 있으므로 상황에 따라 약간 다른 의미를 가질 수 있습니다. 그럼에도 불구하고 한 언어로 다른 언어로 작업하는 프로그래머는 특정 용어에 더 익숙합니다. 프로그래머는 동료의 용어 사용 (올바르 든 부정확)에도 영향을받습니다. 이러한 용어는 종종 서로 바꿔서 사용됩니다. 예를 들어 아래 주석 중 일부를 참조하십시오.
jvriesem

답변:


1830

기능은 이름에 의해 호출되는 코드의 조각이다. 작동 할 데이터 (예 : 매개 변수)를 전달하고 선택적으로 데이터 (반환 값)를 리턴 할 수 있습니다. 함수에 전달 된 모든 데이터는 명시 적으로 전달됩니다.

방법은 객체와 연관된 이름으로 호출 코드의 조각이다. 대부분의 경우 두 가지 주요 차이점을 제외하고 함수와 동일합니다.

  1. 메소드는 메소드가 호출 된 오브젝트를 내재적으로 전달합니다.
  2. 메소드는 클래스 내에 포함 된 데이터에 대해 조작 할 수 있습니다 (객체는 클래스의 인스턴스임을 기억하십시오. 클래스는 정의이고 오브젝트는 해당 데이터의 인스턴스 임).

(이것은 범위 문제 등을 무시하고 단순화 된 설명입니다 .)


249
1)의 경우 C ++의 메소드를 멤버 함수 라고 추가해야 합니다. 따라서이 문맥에서 함수와 메소드의 차이는 C ++의 함수와 멤버 함수의 차이와 유사합니다. 또한 Java와 같은 언어에는 메소드 만 있습니다. 이 경우 함수는 정적 메서드와 유사하며 메서드는 동일한 의미를 갖습니다. 2)의 경우 메소드가 클래스의 일부로 선언 된 개인 인스턴스 (멤버) 데이터 에서 작동 할 수 있음을 추가해야합니다 . 모든 코드는 퍼블릭 인스턴스 데이터에 액세스 할 수 있습니다.
Raffi Khatchadourian 2018 년

45
함수는 수학적 구성입니다. 모든 메소드가 함수라고 말하지만 모든 함수가 메소드는 아닙니다.
Tyler Gillies

28
함수형 프로그래밍 배경에서 나온 함수와 메소드 사이에는 깊은 차이가 있다고 생각합니다. 주로 방법은 부작용이 있으며, 그 기능은 순수해야 참조 투명성의 다소 좋은 특성을 제공합니다
HHC

26
@TylerGillies와 HHC는 "함수"와 "방법"이 당신이 원하는 것을 의미한다면 좋을 것이라고 생각하지만, 당신의 정의는 그러한 용어의 매우 일반적인 용도를 반영하지 않습니다.
Paul Draper

9
이 정의에 따르면 정적 메소드는 특정 인스턴스와 관련이 없기 때문에 실제로 메소드로 간주되지 않습니까?
Carcigenicate

961

메소드가 오브젝트에 있습니다.
함수는 객체와 무관합니다.

Java 및 C #의 경우 메소드 만 있습니다.
C의 경우 기능 만 있습니다.

C ++ 및 Python의 경우 클래스에 있는지 여부에 따라 다릅니다.


39
C #을 추가 할 차례입니다.
Rosdi Kasim

7
@RosdiKasim C #에는 메서드 만 있습니다. (정적 메소드조차 객체와 연관되어야하기 때문에)
Lynn Crumbling

38
클래스의 정적 메소드는 어떻습니까? 그것들은 객체와 무관합니다 (자바에서). 그때는 함수가 아닌가?
퀴저

12
@Squeazer 최근에 stackoverflow.com/questions/30402169/… 에 대한 질문이 있습니다 . Java 언어 사양은 "클래스 메소드"(정적) 및 "인스턴스 메소드"와 다릅니다. 그래서 그들은 여전히 ​​모든 방법입니다.
xji

13
Java는 람다 식을 가지고 있는데, 이는 함수가 아닌 함수입니다.
Max Heiber

228

'method''function'에 대한 객체 지향 단어입니다 . 그것은 거의 모든 것입니다 (즉, 실제 차이는 없습니다).

불행히도, 여기에 많은 답변이 복잡하고 의미있는 차이가 있다는 생각을 지속 시키거나 발전시키고 있다고 생각합니다.

실제로-그다지 많지는 않지만 같은 것에 대해 다른 단어가 있습니다.

【늦은 추가】


실제로 Brian Neal 이이 질문 에 대한 의견에서 지적했듯이 C ++ 표준은 멤버 함수를 참조 할 때 '방법'이라는 용어를 사용하지 않습니다. 어떤 사람들은 C ++이 실제로 객체 지향 언어가 아니라는 표시로 받아 들일 수 있습니다. 그러나 나는 꽤 똑똑한 사람들이 다른 용어를 사용해야 할 특별한 이유가 있다고 생각하지 않았다는 것을 나타내는 것으로 선호합니다.


14
메소드는 암시 적 인수가 전달 된 특수 유형의 함수입니다 (메소드가 정의 된 클래스의 인스턴스). 이것은 엄밀히 말해서 함수로서 인수 목록에없는 것을 사용하거나 수정해서는 안됩니다.
ty1824

4
@ ty1824 메소드가 암시 적 인수로 전달되는 것은 아닙니다. 파이썬에서는 그 self주장이 명백하다. 그리고 많은 언어에는 정적 메서드가 있으며 인스턴스에는 전달되지 않습니다.
Max Heiber

1
@ mheiber 이것들은 유효한 포인트입니다. 자기와 관련하여, 당신은 정확합니다, 그것은 명확하게 정의되어 있습니다. 핵심은 원래 객체 참조에 따라 호출이 암시 적이라는 것입니다. this또는 재정의를 지원하는 언어가 self있지만 이러한 구조는 일반적으로 메서드가 아니라 함수라고합니다.
ty1824

1
@mheiber 정적 메소드와 관련하여 Java는 해결 방법으로 구현하여 컨텍스트를 요구하지 않고 함수를 구현할 수 있습니다. 나는 '정적 방법'이 오해의 소지가있는 용어이며, 이상적인 이론 세계에서 대체되어야한다고 제안하기까지했다. :)
ty1824

1
@ ty1824 C ++, Scala, Python, Ruby, JavaScript 및 Scala 모두 정적 메소드를 가지고 있으므로 Java 일 뿐이라고 생각하지 않습니다. 나는 그것들도 마음에 들지 않습니다 : 그것들은 마치 네임 스페이스 인 것처럼 객체 (번들 상태)를 사용합니다.
Max Heiber

99

일반적으로 : 메소드는 클래스에 속하는 함수이며 함수는 코드의 다른 범위에있을 수 있으므로 모든 메소드가 함수이지만 모든 함수가 메소드가 아님을 진술 할 수 있습니다.

다음 파이썬 예제를 보자.

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

주어진 예는 "open"이라는 메소드 또는 조치가있는 "Door"라는 클래스를 보여줍니다. 클래스 내에서 선언 되었기 때문에 메소드라고합니다. 함수를 정의하는 바로 아래에 "def"가있는 코드의 또 다른 부분이 있습니다.이 함수는 클래스 내에서 선언되지 않았기 때문에 함수입니다.이 함수는 클래스 내부에서 정의한 메소드를 호출 할 수 있습니다. 자체적으로 호출됩니다.

보시다시피 어디서나 함수를 호출 할 수 있지만 메소드를 호출하려면 클래스와 동일한 유형의 새 객체를 전달해야합니다 (클래스. 메소드 (객체)). 적어도 파이썬에서 객체 내부의 메소드 (object.Method ()).

메소드를 하나의 엔티티 만 수행 할 수있는 것으로 생각하십시오. 따라서 Dog 클래스가있는 경우 해당 클래스 내부에만 껍질 함수가있는 것이 합리적이며 Person 클래스도있는 경우 메소드가됩니다. 인간과 개 모두에게 먹이를 줄 수 있기 때문에 어떤 클래스에도 속하지 않는 함수 "피드"를 작성하십시오. 특히 어떤 클래스에도 속하지 않기 때문에 함수를 호출 할 수 있습니다.


2
이 답변 (주로 첫 번째 문장)은 그 질문에 대한 가장 간결하고 전반적인 최선의 답변입니다.
yourcomputergenius

61

기억하는 간단한 방법 :

  • F의 → 기름 부음 F의 REE는 (무료는 객체 나 클래스에 속하지 의미)
  • M은 → ethod M의 엠버 (객체 또는 클래스의 멤버)

일반적으로 상호 교환이 가능하기 때문에 왜 니모닉이 필요합니까?
Sapphire_Brick

44

함수메소드 의 주요 차이점에 대한 매우 일반적인 정의 :

함수는 클래스 외부에서 정의되는 반면 메서드는 클래스 내부 및 일부에서 정의됩니다.


30

여기에서 읽고 싶은 느낌이 든다면 "OO 방법에 대한 나의 소개"입니다.

객체 지향 패러다임의 기본 개념은 소프트웨어가 .. 잘 "객체"로 구성되어 "위협"하는 것입니다. 실제 세계의 개체에는 속성이 있습니다. 예를 들어 직원이 있거나 직원의 이름, 직원 ID, 직책, 부서에 속한 사람 등이 있습니다.

객체는 또한 속성을 처리하고 일부 작업을 수행하는 방법을 알고 있습니다. 직원이 지금하고있는 일을 알고 싶다면 그에게 물을 것입니다.

employe whatAreYouDoing.

"whatAreYouDoing"은 객체로 전송 된 "메시지"입니다. 그 대상은 그 질문에 대답하는 방법을 알고 있으며 질문을 해결하는 "방법"이 있다고합니다.

따라서 객체가 동작을 노출시키는 방식을 메소드라고합니다. 따라서 아티팩트 객체는 무언가를 "해야"합니다.

다른 가능한 방법은

employee whatIsYourName
employee whatIsYourDepartmentsName

기타

반면 함수는 프로그래밍 언어가 일부 데이터를 계산하는 방법입니다. 예를 들어 16을 반환하는 addValues ​​(8, 8) 함수가있을 수 있습니다.

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

fortran, c, pascal과 같은 인기있는 프로그래밍 언어는 OO 패러다임을 다루지 않았으므로 이러한 아티팩트를 "함수"라고 부릅니다.

예를 들어 C의 이전 함수는 다음과 같습니다.

int addValues( int x, int y ) 
{
   return x + y;
}

직원에게는 수학이 거의 없지만 함수는 수학과 더 관련이 있기 때문에 객체에 어떤 동작을 수행하는 "기능"이 있다고 말하는 것은 "자연스럽지 않습니다". 예를 들어 Java에서는 동등한 addValues ​​함수가됩니다.

public static int addValues( int x, int y ) {
    return x + y;
}

익숙해 보이나요? Java가 C ++에 뿌리를두고 C에 C ++를 뿌리고 있기 때문입니다.

결국은 개념 일 뿐이며, 구현에서는 그것들이 동일하게 보일 수 있지만, OO 문서에서는 이것을 메소드라고합니다.

다음은 Java의 이전 Employee 객체의 예입니다.

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

차이점은 적용되는 "도메인"에 있습니다.

AppleScript는 어느 시점에서 OO가 가지고 있던 "자연어"성숙도라는 아이디어를 가지고 있습니다. 예를 들어 스몰 토크. 이것을 읽은 후에 객체의 메소드를 이해하는 것이 합리적 일 수 있기를 바랍니다.

참고 : 코드는 예제로 사용하기 위해 컴파일되지 않습니다. 게시물을 수정하고 Python 예제를 추가하십시오.


3
브라보! 메소드가 객체에 대한 명령 방법에 대한 훌륭한 설명. 이것이 OO를 이해하는 열쇠이며이 답변에 표시되는 수사력이 없기 때문에 OO가 오늘날 업계에서 그렇게 남용되는 이유입니다. 훌륭한 게시물.
moffdub

18

OO 세계에서 두 가지는 일반적으로 같은 것을 의미하는 데 사용됩니다.

순수한 Math 및 CS 관점에서 함수는 동일한 인수 (f (x, y) = (x + y))로 호출 될 때 항상 동일한 결과를 반환합니다. 반면에, 메소드는 일반적으로 클래스의 인스턴스와 연관됩니다. 다시 말하지만, 대부분의 최신 OO 언어는 더 이상 "기능"이라는 용어를 더 이상 사용하지 않습니다. 많은 정적 메소드는 일반적으로 상태가 없기 때문에 함수와 매우 유사 할 수 있습니다 (항상 true는 아님).


17

함수가 일부 인수를 수신하고 결과를 반환 할 수있는 코드 블록 (일반적으로 자체 범위 및 경우에 따라 자체 폐쇄가있는)이라고 가정 해 봅시다.

메소드는 객체가 소유 한 함수입니다 (일부 객체 지향 시스템에서는 클래스가 소유하고 있다고 말하는 것이 더 정확합니다). 객체 / 클래스가 "소유"한다는 것은 객체 / 클래스를 통해 메소드를 참조한다는 의미입니다. 예를 들어, Java에서 "door"오브젝트가 소유 한 "open ()"메소드를 호출하려면 "door.open ()"을 작성해야합니다.

일반적으로 메소드는 또한 객체 / 클래스 내에서 동작을 설명하는 추가 속성을 얻습니다.

많은 객체 지향 언어에서 모든 "함수"는 일부 객체 (또는 클래스)에 속하므로 이러한 언어에는 메소드가 아닌 함수가 없습니다.


1
Javascript (귀하의 질문에서 언급 한)는 클래스가 아닌 객체가 소유 한 메소드를 사용하여 객체 지향 언어의 일반적인 추세를 뒷받침하는 언어 중 하나이기 때문에 객체 또는 클래스가 메소드를 소유 할 수 있다고 공동 작업했습니다. 수업이 존재합니다).
Mike Tunnicliffe

15

메소드는 클래스의 함수입니다. 일반적인 전문 용어에서 사람들은 방법과 기능을 온전히 교환합니다. 기본적으로 그것들을 같은 것으로 생각할 수 있습니다 (전역 함수가 메소드라고 불릴 지 확실하지 않습니다).

http://en.wikipedia.org/wiki/Method_(computer_science)


13

함수는 수학적 개념입니다. 예를 들면 다음과 같습니다.

f(x,y) = sin(x) + cos(y)

함수 f ()는 두 번째 매개 변수의 코사인에 추가 된 첫 번째 매개 변수의 sin을 반환한다고 말합니다. 수학 일뿐입니다. sin ()과 cos ()도 함수입니다. 함수에는 다른 속성이 있습니다. 동일한 매개 변수를 가진 함수를 호출하면 모두 동일한 결과를 반환해야합니다.

한편, 방법은 객체 지향 언어의 객체와 관련된 함수입니다. 여기에는 하나의 암시 적 매개 변수가 있습니다 : 작동중인 오브젝트 (및 상태).

따라서 g (x) 방법을 사용하여 객체 Z가있는 경우 다음을 볼 수 있습니다.

Z.g(x) = sin(x) + cos(Z.y)

이 경우 앞의 함수 예에서와 같이 매개 변수 x가 전달됩니다. 그러나 cos ()에 대한 매개 변수는 개체 Z 내에있는 값입니다. Z와 그 안에있는 데이터 (Zy)는 Z의 g () 메서드에 대한 암시 적 매개 변수입니다.


13

함수 또는 메서드는 이름이 지정된 호출 가능한 코드로, 일부 작업을 수행하고 선택적으로 값을 반환합니다.

에서는 C의 언어 기능이라는 용어가 사용된다. Java & C # 사람들은 메소드라고 말합니다 (이 경우 함수는 클래스 / 객체 내에 정의됩니다).

C ++ 프로그래머는이 용어를 '방법'이기 때문에, 또한 C / C ++는 단지 프로그래머 가능성이 함수를 호출 할 ++ 절차 스타일의 C ++ 코드를 작성하거나 C의 객체 지향 방법을 수행하는 경우에 따라 함수 나 때때로 방법 (호출 수 C / C ++ 문헌에서 덜 자주 사용됨).

함수는 이름을 다음과 같이 호출하여 사용합니다.

result = mySum(num1, num2);


먼저 객체를 참조하여 메소드를 호출합니다.

result = MyCalc.mySum(num1,num2);

13

역사적으로는 "방법"값을 반환하지 않는 것을 무언가하고, "기능"does.Each 언어 자체가 하나 미묘한 차이가되었을 수도 용어의 어휘 특별한 의미를.

에서 "C" 단어 "기능" 을 의미 하는 프로그램 루틴을 .

에서 자바 , 용어 "기능은" 특별한 의미가 없습니다. 반면 "방법" 은 클래스의 구현을 구성하는 루틴 중 하나를 의미합니다.

C # 에서는 다음 과 같이 번역됩니다.

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

그러나 실제로 두 개념에는 차이가 없다고 반복합니다. Java에 대한 비공식 토론에서 "기능"이라는 용어를 사용하면 사람들은 "방법"을 의미한다고 가정하고 계속합니다. Java에 관한 적절한 문서 나 프리젠 테이션에 사용하지 마십시오. 어리석게 보일 것입니다.


사실, 당신의 예제에서 모두 method... 또는 내가 부를 것이다 procedure하고 function.
Yousha Aleayoub

9

함수는 데이터를 조작하는 데 사용할 수있는 일련의 논리입니다.

반면, Method는 객체가 속한 객체의 데이터를 조작하는 데 사용되는 함수입니다. 따라서 기술적으로, 클래스와 완전히 관련이 없지만 클래스에서 선언 된 함수가 있다면 메소드가 아닙니다. 나쁜 디자인이라고합니다.


8

클래스의 메소드는 객체라고하는 클래스의 인스턴스에서 작동합니다.

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}

8

Object Pascal 또는 C ++와 같은 OO 언어에서 "방법"은 객체와 관련된 함수입니다. 예를 들어, "개"개체에는 "나무 껍질"기능이있을 수 있으며 이는 "방법"으로 간주됩니다. 반대로 "StrLen"함수는 독립형입니다 (인수로 제공된 문자열의 길이를 제공함). 따라서 이것은 단지 "기능"입니다. Javascript는 기술적으로 객체 지향적이지만 C ++, C # 또는 Pascal과 같은 완전한 언어와 비교할 때 많은 제한에 직면합니다. 그럼에도 불구하고 구별은 여전히 ​​유효하다.

몇 가지 추가 사실 : C #은 완전히 객체 지향적이므로 독립형 "함수"를 만들 수 없습니다. C #에서 모든 함수는 객체에 바인딩되므로 기술적으로 "메소드"입니다. 키커는 C #에서 소수의 사람들이 "메소드"라고 부르는 것입니다. 실제로 구별 할 것이 없기 때문에 "함수"라는 용어 만 사용합니다.

마지막으로-파스칼 전문가가 나를 여기에 뛰어 넘지 않도록하십시오-파스칼은 또한 "기능"(값을 반환하는)과 그렇지 않은 "프로 시저"를 구별합니다. 물론 C #에서는 값을 반환할지 여부를 선택할 수 있지만이 구분을 명시 적으로 만들지는 않습니다.


8

파이썬을 언급 했으므로 다음은 가장 현대적인 객체 지향 언어에서 메소드와 객체 간의 관계를 보여주는 유용한 예일 수 있습니다. 간단히 말해서 그들이 "메소드"라고 부르는 것은 다른 인수가 지적한 것처럼 추가 인수를 전달하는 함수 일 뿐이지 만 Python은 대부분의 언어보다 더 명시 적으로 만듭니다.

# perfectly normal function
def hello(greetee):
  print "Hello", greetee

# generalise a bit (still a function though)
def greet(greeting, greetee):
  print greeting, greetee

# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
  print greeter.greeting, greetee

# very simple class we can pass to greet_with_greeter
class Greeter(object):
  def __init__(self, greeting):
    self.greeting = greeting

  # while we're at it, here's a method that uses self.greeting...
  def greet(self, greetee):
    print self.greeting, greetee

# save an object of class Greeter for later
hello_greeter = Greeter("Hello")

# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")

이제 함수 greet_with_greeter와 메소드를 비교해보십시오 greet. 유일한 차이점은 첫 번째 매개 변수의 이름입니다 (함께 "자체"라고하는 함수에서 "인수"라고 함). 따라서 함수를 greet사용하는 것과 정확히 같은 방식으로 메소드를 사용할 수 있습니다 greet_with_greeter(클래스 내부에서 정의 했으므로 "도트"구문을 사용하여 가져옵니다).

Greeter.greet(hello_greeter, "World")

그래서 효과적으로 메소드를 함수로 전환했습니다. 함수를 메소드로 바꿀 수 있습니까? 파이썬이 클래스를 정의한 후에 엉망으로 만들 수 있으므로 시도해 봅시다.

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

예, 기능 greet_with_greeter은 이제 메소드라고도합니다 greet2. 이것은 메소드와 함수의 유일한 차이점을 보여줍니다. 메소드를 호출하여 오브젝트를 "on"메소드를 호출 object.method(args)하면 언어는 마술로로 바뀝니다 method(object, args).

(OO 순수 주의자들은 메소드가 함수와 다른 것이라 주장 할 수도 있고, 고급 파이썬이나 루비 또는 스몰 토크에 들어가면 그 포인트를 보게 될 것입니다. 또한 일부 언어는 메소드에 객체의 비트에 대한 특별한 액세스를 제공합니다. 주요 개념 차이는 여전히 숨겨진 추가 매개 변수입니다.)


7

나를 위해 : 메소드와 함수의 기능은 내가 동의하면 동일합니다.

  • 함수는 값을 반환 할 수 있습니다
  • 매개 변수를 기대할 수 있습니다

다른 코드와 마찬가지로 입력 한 객체가있을 수 있으며 결과적으로 생성되는 객체가있을 수 있습니다. 그렇게하는 동안 객체의 상태가 변경 될 수는 있지만 기본 기능은 변경되지 않습니다.

객체 또는 다른 코드의 함수를 호출 할 때 정의에 차이가있을 수 있습니다. 그러나 그것은 언어 적 차별에 대한 것이 아니며 사람들이 그것들을 교환하는 이유입니까? 내가 언급 할 계산의 예를 언급했다. 내가 계산을하기 위해 고용을하기 때문에 :

new Employer().calculateSum( 8, 8 );

그렇게하면 계산을 담당하는 고용주에게 의지 할 수 있습니다. 그가 더 많은 돈을 원한다면 나는 그를 풀어주고 미사용 직원을 처분하는 쓰레기 수거업자의 기능이 나머지를하고 새 직원을 얻도록하자.

메소드가 객체 함수이고 함수가 연결되지 않은 계산이라고 주장하더라도 도움이되지 않습니다. 함수 디스크립터 자체와 이상적으로 함수의 문서는 무엇이 필요하고 무엇이 반환 될 수 있는지 알려줍니다. 일부 객체의 상태를 조작하는 것과 같은 나머지는 실제로 투명하지 않습니다. 나는 기능과 방법 모두 그들이 어떻게하는지에 대해 자세히 알 필요없이 그들이 주장하는 것을 전달하고 조작 할 것으로 기대합니다. 순수한 계산 기능조차도 콘솔의 상태를 변경하거나 로그 파일에 추가 할 수 있습니다.


5

매우 간단한 답변이 무엇인지 지나치게 복잡하게 만들지 마십시오. 방법과 기능은 같습니다. 클래스 외부에있을 때 함수를 함수라고하고 클래스 내부에 쓸 때 함수를 메서드라고합니다.


4

내 이해에서 메소드는 클래스에서 수행 할 수있는 모든 작업입니다. 프로그래밍에 사용되는 일반적인 용어입니다.

많은 언어에서 메소드는 함수와 서브 루틴으로 표시됩니다. 대부분의 언어에서 이러한 언어를 사용하는 주요 차이점은 함수가 호출자에게 값을 다시 반환 할 수 있고 서브 루틴은 그렇지 않을 수 있다는 것입니다. 그러나 많은 현대 언어에는 함수 만 있지만 선택적으로 값을 반환 할 수는 없습니다.

예를 들어, 고양이를 묘사하고 하품을하고 싶다고 가정 해 봅시다. Yawn 메소드를 사용하여 Cat 클래스를 작성하면 리턴 값이없는 함수일 가능성이 높습니다.


4

1 차 근사화에서, 메소드 (C ++ 스타일 OO)는 멤버 함수의 또 다른 단어, 즉 클래스의 일부인 함수입니다.

C / C ++와 같은 언어에서는 클래스의 멤버가 아닌 함수를 가질 수 있습니다. 클래스와 관련되지 않은 함수는 메소드를 호출하지 않습니다.


4

함수는 주로 프로 시저 지향 프로그래밍에 속하는 개념입니다 . 함수는 데이터를 처리하고 값을 리턴 할 수있는 엔티티입니다.

Method는 객체 지향 프로그래밍 의 개념으로 , 메소드는 클래스 멤버를 처리하는 클래스의 멤버입니다.


3

IMHO 사람들은 프로그래머가 객체 내부의 함수를 참조하려고 할 때 쉽게 의사 소통하기 위해 새로운 단어를 발명하기를 원했습니다.

메서드를 말하는 경우 클래스 내부의 함수를 의미합니다. 함수를 말하는 경우 단순히 클래스 외부의 함수를 의미합니다.

진실은 두 단어가 기능을 설명하는 데 사용된다는 것입니다. 잘못 사용하더라도 아무 일도 일어나지 않습니다. 두 단어 모두 코드에서 달성하고자하는 것을 잘 설명합니다.

함수는 무언가를 하는 역할 ( 함수 )을 수행해야하는 코드입니다. 방법은 방법 이 문제를 해결하기 위해.

같은 일을합니다. 같은 것입니다. 매우 정확하고 규칙을 따르고 싶다면 객체 내부의 함수로 메소드를 호출 할 수 있습니다.


2

나는 전문가가 아니지만 이것이 내가 아는 것입니다.

  1. 함수는 C 언어 용어이며 코드 조각을 나타내며 함수 이름은이 함수를 사용하는 식별자입니다.

  2. 방법은 OO 용어이며 일반적으로 함수 매개 변수에 this 포인터가 있습니다. C와 같은이 코드를 호출 할 수 없으므로 객체를 사용하여 호출해야합니다.

  3. 호출 메소드도 다릅니다. 여기서이 코드의 주소를 찾기 위해 의미를 호출하십시오. C / C ++에서 연결 시간은 함수 기호를 사용하여 찾습니다.

  4. Objecive-C는 다릅니다. 데이터 구조를 사용하여 주소를 찾으려면 의미 C 함수를 호출하십시오. 런타임에 모든 것이 알려져 있음을 의미합니다.


2

나는 많은 사람들이 이미 대답했다는 것을 알고 있지만 다음은 간단하지만 효과적인 단선 답변이라는 것을 알았습니다. 여기에있는 다른 답변보다 훨씬 나아 보이지는 않지만주의 깊게 읽으면 방법 대 기능에 대해 알아야 할 모든 것이 있습니다.

메소드는 정의 된 수신자를 갖는 함수이며, OOP 용어로 메소드는 오브젝트 인스턴스의 함수입니다.


2

방법과 기능의 차이

이 문서 를 Microsoft 에서 읽음

실행 코드가 포함 된 멤버를 통틀어 클래스의 함수 멤버라고합니다. 이전 섹션에서는 함수의 주요 종류 인 메서드에 대해 설명했습니다. 이 섹션에서는 C #에서 지원하는 다른 종류의 함수 멤버 인 생성자, 속성, 인덱서, 이벤트, 연산자 및 종료 자에 대해 설명합니다.

따라서 메소드는 함수의 서브 세트입니다. 모든 메소드는 함수이지만 모든 함수가 메소드 constructor는 아닙니다. 예를 들어, 메소드 라고 말할 수는 없지만 함수입니다.


속성, 인덱서 및 이벤트는 기능이 아닙니다. getter, setter (속성 및 인덱서), adder 및 remover (이벤트)는 함수입니다. 함수 멤버는 하나 이상의 함수와 연관되어 있지만 반드시 함수일 필요는 없습니다.
Jon Hanna

2

함수-일부 논리를 포함하고 독립적으로 호출되어야하며 클래스 외부에서 정의 되어야 하는 독립적 인 코드 조각의 함수입니다 .

메소드-메소드는 일부 오브젝트를 참조하여 호출되며 클래스 내부에서 정의 되는 독립적 인 코드입니다 .


정적 클래스에서 코드를 무엇이라고합니까? 정적이기도합니다. 이것이 메서드 또는 함수입니까? 클래스의 정적 함수 / 메소드에는 선언 된 클래스의 객체가 필요하지 않습니다.
Wolfgang Roth

1

다음은 JavaScript 예제를 사용한 메소드 대 함수에 대한 설명입니다.

test(20, 50); 함수 정의 및 일부 단계를 실행하거나 어딘가에 저장 / 사용할 수있는 무언가를 반환하는 데 사용됩니다.

코드를 재사용 할 수 있습니다. 코드를 한 번 정의하고 여러 번 사용하십시오.

다른 인수로 동일한 코드를 여러 번 사용하여 다른 결과를 생성 할 수 있습니다.

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test = something.test(); 여기 test ()는 일부 객체의 메소드이거나 내장 객체에 대한 사용자 정의 프로토 타입을 정의 할 수 있습니다. 자세한 설명은 다음과 같습니다.

JavaScript 메소드는 객체에서 수행 할 수있는 작업입니다.

JavaScript 메소드는 함수 정의를 포함하는 특성입니다.

자바 스크립트에서 문자열에 대한 내장 속성 / 방법 :

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

맞춤 예 :

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

예를 들어 문자열, 배열 등에 대한 속성을 정의 할 수 있습니다

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        console.log(char + " does not appear in " + this);
    } else {
        console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

var something = "ThisIsSomeString"

// now use distance like this, run and check console log

something.distance("m");

일부 참조 : Javascript Object Method , Functions , prototype에 대한 추가 정보


여러 질문에 동일한 답변을 게시하지 마십시오. 하나의 좋은 답변을 게시 한 다음 투표 / 플래그를 붙여 다른 질문을 중복으로 닫습니다. 질문이 중복되지 않은 경우 질문에 대한 답변을 조정하십시오.
Paul Roub

의견 주셔서 감사합니다, 나는 다른 답변을 조정하지 않았다, 나는 그 대답을 삭제했습니다. :-)
Lahar Shah

1

TL; DR

함수는 실행할 코드입니다.
메소드는 객체 내부의 함수입니다.

함수의 예 :


function sum(){
  console.log("sum")l
}

방법의 예 :

const obj = {
a:1,
b:2,
sum(){
  }
}

따라서 함수 안에서 "this"키워드를 호출, 적용 또는 바인드와 함께 사용하지 않는 한 그렇게 유용하지 않다고 말하는 이유는 무엇입니까? 함수를 메소드로 변환


1

그것들은 종종 상호 교환이 가능하지만 메소드는 일반적으로 클래스 내부의 서브 루틴을 참조 하고 함수는 일반적으로 클래스 외부의 서브 루틴을 참조합니다. 예를 들어, Ruby에서 :

# function
def putSqr(a)
   puts a ** 2
end


class Math2
   # method
   def putSqr(a)
      puts a ** 2
   end
end

모든 것 (패키지 및 import 문 제외)이 클래스 내부에 있어야하는 Java에서 사람들은 거의 항상 "메소드"라고합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.