인수와 매개 변수의 차이점은 무엇입니까?


717

메소드에 대해 구두로 말할 때 인수 또는 매개 변수 또는 다른 것을 사용할지 확실하지 않습니다. 다른 사람들이 내가 의미하는 바를 알지만, 무엇이 정확하고, 용어의 역사는 무엇입니까?

저는 C # 프로그래머이지만 사람들이 다른 언어로 다른 용어를 사용하는지 궁금합니다.

기록을 위해 나는 컴퓨터 과학에 대한 배경 지식없이 스스로를 가르칩니다. ( Steve McConnell 의 놀라운 책을 아직 가지고 있지 않은 다른 사람들의 이익을 위해 이것을 요구하고 있기 때문에 Code Complete 를 읽으라고 말하지 마십시오 .)

요약

일반적인 합의는 팀 환경에서 이러한 용어를 서로 바꿔 사용할 수 있다는 것입니다. 정확한 용어를 정의 할 때를 제외하고; " 공식 인수 / 매개 변수"및 " 실제 인수 / 매개 변수"를 사용하여 명확하게 할 수도 있습니다 .


9
나는 그것들을 서로 바꿔서 사용한다. 아직 아무도 나를 비웃지 않았다..이 함수는 4 개의 인수를 가진다. 같은 소리.
Gishu

54
매개 변수가 작동하는 방식과 인수가 전달되는 방식 등을 설명 할 때를 제외하고는 상호 교환하여 사용할 수 있습니다.이 시점에서 정확한 용어 (때로는 표현하기가 어려울 수 있음)가 유용합니다.
Jon Skeet

2
이 질문에는 닫히지 않은 언어에 구애받지 않는 두 가지 버전이 있습니다 : stackoverflow.com/questions/3176310/…stackoverflow.com/questions/427653/arguments-or-parameters . 이 질문의 또 다른 C # 버전도 있습니다. 병합을 요청했습니다.
Pops

1
Steve McConnell을 언급하게되어 기쁩니다. Robert C. Martin과 함께 소프트웨어 장인 정신을 알고있는 사람에 대해 더 알게되었습니다.
RBT

3
나는 당신이 공식적인 환경에 있는지 여부에 관계없이 올바른 용어를 사용하기 위해 노력해야한다고 생각합니다. 꽤 간단하다고 생각합니다. 메소드를 호출하면 인수를 전달합니다. 메소드를 정의 할 때 메소드 / 함수 호출에서 인수를 가져 오는 매개 변수를 정의합니다. argument-함수와 연관된 독립 변수로 함수의 값을 결정합니다. 매개 변수-특정 프로세스 또는 활동의 범위를 정의하는 한계 또는 경계.
jsquaredz

답변:


904

매개 변수는 메소드 정의의 변수입니다. 메소드가 호출되면 인수는 메소드의 매개 변수에 전달하는 데이터입니다.

public void MyMethod(string myParam) { }

...

string myArg1 = "this is my argument";
myClass.MyMethod(myArg1);

196
다음과 같은 도움이 될 수있는 유혹적인 니모닉. ;)
thSoft

8
대답은 "매개 변수는 메소드 정의에서 변수"라고 언급하지만 "누군가 '선언'과 '정의'사이를 구별하는 경우"방법 선언 "이라고 말하는 것이 좋습니다.
nandan

110
"매개 변수를 정의하고 인수를 만듭니다."
Greg M. Krsak

5
매개 변수 => 함수를 정의 할 때, 인수 => 해당 메소드를 호출 할 때. (내가
틀렸다면 나를 교정하십시오

7
매개 변수는 이름입니다. 인수는 가치입니다.
Aziz Alto

327

매개 변수 는 함수 선언에서 변수입니다.

인수 는 함수에 전달되는이 변수의 실제 값입니다.


7
이 언어는 일반적으로 메서드에 전달 된 인수 / 매개 변수 목록을 참조 *args하거나 ARGV하지 *params:-)
karatedog

6
*params매개 변수 이름을 포함하는 변수의 이름입니다 (아마도 내성 검사에 사용됨).
trss

6
@karatedog 그리고 그것은 실제로이 구별과 완전히 일치합니다. 매개 변수는 선언시 이름이 지정되며 인수는 호출시에만 알려져 있습니다. 이 구문 *args은 값이 인수 목록 (선언시 알려진 이름 및 유형) (번호는 호출시에만 알려짐 ) 인 매개 변수 args 를 선언합니다 .
Emil Lundberg

72

주제에 매개 변수인수 라는 용어를 정의하고 구별 하는 위키피디아 항목이 이미 있습니다 ( 매개 변수 참조 ). . 요컨대, 매개 변수는 함수 / 프로 시저 / 방법 서명의 일부이고 인수는 매개 변수에 대한 런타임 및 / 또는 호출 사이트에서 제공되는 실제 값입니다.

Wikipedia 기사는 또한 두 용어가 종종 동의어로 사용된다고 명시하고 있습니다 (특히 비공식적으로 코드에 대해 추론 할 때).

매개 변수는 일반적으로 인수로도 불려지지만, 인수는 서브 루틴이 런타임에 호출 될 때 매개 변수에 지정된 실제 값 또는 참조로 더 적절하게 생각됩니다.

두 정수를 가산 C의 다음 샘플 함수 주어 xy그 파라미터로 지칭 될 것이다 :

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

add아래 예 와 같이을 사용하는 콜 사이트 에서 123456 을 호출 의 인수 라고합니다.

int result = add(123, 456);

또한 일부 언어 사양 (또는 공식 문서)은 매개 변수 또는 인수를 독점적 으로 사용하도록 선택 하고 두 경우를 명확하게하기 위해 공식실제 와 같은 형용사를 사용 합니다. 예를 들어, C / C ++ 문서는 종종 함수 매개 변수형식 인수로 , 함수 호출 인수실제 인수로 참조 합니다. 예를 들어, Visual C ++ 언어 참조 설명서의정규 및 실제 인수 ”를 참조하십시오 .


+1 공식적인 정의뿐만 아니라 일반적으로 사용되는 방법을 설명하고 모호함없이 구별하기 위해 "형식"및 "실제"인수 / 매개 변수의 공통 사용을 언급합니다.
기계 달팽이

이것은 훌륭한 설명이지만 개념의 단순성에 비해 이해하기가 거의 불가능합니다. 매개 변수는 허용되는 것이고, 인수는 호출되는 것입니다. 일방 통행 거리입니다.
ihodonald

69

단순한:

  • P ARAMETER → P LACEHOLDER (자리 표시자는 함수 이름 지정에 속하며 함수 본문에 사용됨을 의미합니다)
  • RGUMENT → CTUAL VALUE (수단이 함수 호출에 의해 전달되는 실제 값)

3
좋은 기억 후크
Tanckom


29

매개 변수 는 함수 선언에서 변수입니다.

인수 는 함수에 전달되는이 변수의 실제 값입니다. 여기에 이미지 설명을 입력하십시오


16

매개 변수와 인수라는 용어의 사용은 프로그래머와 저자 사이에서 다소 잘못 사용되었습니다. 메소드를 처리 할 때 매개 변수 라는 용어 는 메소드 서명에서 플레이스 홀더를 식별하는 데 사용되는 반면 인수 인수 는 메소드에 전달하는 실제 값입니다.

MCSD Cerfification Toolkit (시험 70-483) C # 프로그래밍 , 초판, 2013 년 Wrox

실제 사례 시나리오

// Define a method with two parameters
int Sum(int num1, int num2)
{
   return num1 + num2;
}

// Call the method using two arguments
var ret = Sum(2, 3);

10

편집에서 나는 사람들이 잊어 버리는 방법을 자주 언급합니다. 구조 언어는 자연 언어를 기반으로합니다.

영어로

"매개 변수"는 자리 표시 자입니다. 응답 형식을 음성 언어로 설정합니다. 정의에 따라 통화 당사자이므로 응답이 제한됩니다.

"인수"는 고려중인 위치입니다. 당신은 당신의 의견을 주장합니다 : 당신은 논쟁을 고려합니다.

주요 차이점

논증의 주제 적 역할은 에이전트입니다. 매개 변수의 주제 역할은 수신자입니다.

상호 작용

인수를 남성 부분으로 생각하고 매개 변수를 여성 부분으로 만듭니다. 인수는 매개 변수로 들어갑니다.

용법

매개 변수는 일반적으로 정의에 사용됩니다. 논쟁은 보통 호출에 사용됩니다.

질문

덜 불쾌한 문장을 완성하십시오.

(A) 정의에 대해 말하기 :

  1. 어떤 인수가 사용 될까요?
  2. 이 매개 변수는 [] 무엇입니까?

(B) 호출에 대한 말하기 :

  1. [], 어떤 매개 변수를 사용 하시겠습니까?
  2. 이 매개 변수는 []이 (가) 무엇입니까?

대답

(ㅏ)

  1. 이 매개 변수와 함께 on / in / against /
  2. 인수 ... 걸릴

(비)

  1. 그리고 몇 가지 예시적인 주장은 무엇입니까?
  2. 인수 (들) ... on / in / against / with에 사용

오버랩

당신이 상상할 수 있듯이, 대답 후 :이 단어들은 때때로 같은 반응을 보일 것입니다!

따라서 원칙적으로 :

  • 일반적으로 누군가 매개 변수 정보를 원하면 유형, 변수 이름 등에 대해 더 많이 알고 싶어합니다. 예제 인수 만 제공하면 혼란 스러울 수 있습니다.

    • 일반적으로 누군가가 인수 정보를 원하면 함수 또는 해당 매개 변수에 전달한 값을 알고 싶어합니다.

8

이 예제가 도움이 될 수 있습니다.

int main () {
   int x = 5; 
   int y = 4;

   sum(x, y); // **x and y are arguments**
}

int sum(int one, int two) { // **one and two are parameters**
   return one + two;
}

8

다음 사항을 항상 기억하십시오 .- 매개 변수가 수신되는 동안 인수가 전달됩니다.


8

함수 / 방법 의 매개 변수 는 결과 계산에 사용되는 값을 설명합니다.

함수 의 인수 는 함수 / 메소드의 특정 호출 중에 이러한 매개 변수에 지정된 값입니다.


7

또는 메소드에 대한 선택적 인수의 경우 다음과 같이 기억하는 것이 훨씬 간단 할 수 있습니다.

public void Method(string parameter = "argument") 
{

}

parameter매개 변수, 그 값, "argument"인수입니다 :)


7

당신이 항공사라고 가정 해 봅시다. 비행기를 세웁니다. 당신은 그것에 좌석을 설치합니다. 그런 다음 승객으로 비행기를 채우고 어딘가에 보냅니다. 승객 (또는 오히려 시공간적으로 변경된 일부 버전)이 하선한다. 다음 날 같은 비행기와 같은 좌석을 재사용하지만 이번에는 다른 승객과 함께 사용합니다.

비행기는 당신의 기능입니다.

매개 변수는 좌석입니다.

논쟁은 그 자리에 들어가는 승객입니다.


7

매개 변수와 인수

매개 변수 및 인수와 관련된 다른 모든 용어는 혼동 될 수 있습니다. 그러나 몇 가지 간단한 요점을 염두에두면 이러한 용어를 쉽게 처리 할 수 ​​있습니다.

  1. 형식 매개 변수함수 는 함수 선언에 나열되며 함수 정의 본문에 사용됩니다. 형식 매개 변수 (모든 종류의)는 함수가 호출 될 때 무언가로 채워지는 일종의 공백 또는 자리 표시 자입니다.
  2. 인수 형식 매개 변수에 채우기에 사용되는 무언가이다. 함수 호출을 기록하면 함수 이름 뒤에 인수가 괄호 안에 표시됩니다. 함수 호출이 실행되면 형식 매개 변수에 대한 인수가 연결됩니다.
  3. 값별 호출참조 별 호출 이라는 용어 는 플러그인 프로세스에서 사용되는 메커니즘을 나타냅니다. 값별 호출 방법에서는 인수 값만 사용됩니다. 이 값별 호출 메커니즘에서 공식 매개 변수는 해당 인수의 값으로 초기화되는 로컬 변수입니다. 참조 별 호출 메커니즘에서 인수는 변수이며 전체 변수가 사용됩니다. 기준 별 호출 메커니즘에서 인수 변수는 공식 매개 변수로 대체되므로 공식 매개 변수에 대한 변경은 실제로 인수 변수에 적용됩니다.

출처 : Absolute C ++, Walter Savitch

그건,

여기에 이미지 설명을 입력하십시오


6

용어는 다소 호환됩니다. 다른 응답에 기술 된 특징이 더 적절 용어로 표현되는 형식 인자 함수와 본체 내부에 사용되는 이름 파라미터 호 부위에서 주어진 값 ( 정규 인수인수는 또한 일반적이다).

또한 수학에서 인수 라는 용어 는 훨씬 일반적이며 매개 변수는 일반적으로 상당히 다른 것을 의미합니다 ( 파라 메트릭 방정식 의 매개 변수 는 본질적 으로 둘 이상의 함수에 대한 인수 임).


그러나 다시 말하지만, 적어도 복잡한 분석에서는 인수 라는 용어 도 과부하 상태입니다.
기계 달팽이

1
상호 교환 가능한 경합 매개 변수가 있습니다. ;)
와일드 카드

5

인수는 매개 변수의 인스턴스입니다.


4
그것은 오래 전에 다른 프로그래머가 제공 한 설명이며, 그것이 매우 명확하고 간결한 것이라고 생각했습니다. 그런 이유로 여기에 게시했습니다.
Paul Richter

4

예! 매개 변수와 인수는 다른 의미를 가지며 다음과 같이 쉽게 설명 할 수 있습니다.

기능 매개 변수 는 기능 정의에 나열된 이름입니다.

함수 인수 는 전달 된 (및받는) 실제 값입니다.


4

코드가없는 간단한 설명

"매개 변수"는 매우 일반적이고 광범위하지만 "인수 : 매우 구체적이고 구체적인 것"입니다. 이는 일상적인 예를 통해 가장 잘 설명됩니다.

예 1 : 자동 판매기-돈은 매개 변수이고 $ 2.00은 인수입니다

대부분의 기계는 입력을 받아서 출력을 반환합니다. 예를 들어, 자동 판매기는 입력으로 돈을 가져다가 탄산 음료를 출력으로 반환합니다. 이 특별한 경우에는 매개 변수로 사용할 수 있습니다 : 돈.

그렇다면 논쟁은 무엇입니까? 글쎄, 내가 기계에 $ 2.00를 넣었다면, 인수는 $ 2.00입니다-그것은 매우 구체적인 입력입니다.

예 2 : 자동차-가솔린이 매개 변수입니다

자동차를 고려해 봅시다. 가솔린 (무연 휘발유)을 투입물로 받아들입니다. 이 기계는 가솔린 유형의 매개 변수 를 허용한다고 말할 수 있습니다 . 논쟁은 내가 차에 넣은 정확하고 구체적인 입력일 것입니다. 예를 들어 제 경우에는 40 리터의 무연 휘발유 / 가솔린입니다.

예 3-인수에 대한 설명

인수는 구체적이고 구체적인 입력 예입니다. 내 기계가 사람을 입력으로 받아 거짓말 쟁이가 아닌 사람으로 바꾼다고 가정 해 봅시다.

그렇다면 논쟁은 무엇입니까? 실제로 기계에 넣은 사람이 논쟁이 될 것입니다. 예를 들어 Colin Powell을 기계에 넣으면 Colin Powell이됩니다.

따라서 매개 변수는 추상적 인 개념의 사람이 될 수 있지만 논쟁은 항상 특정 이름 을 가진 특정 사람 이 기계에 들어갑니다. 논쟁은 구체적이고 구체적이다.

그 차이입니다. 단순한.

혼란 스러운가?

의견을 게시하면 설명을 수정하겠습니다.



3

둘 다 C에서 사용법에 큰 차이가 없으며 두 용어가 실제로 사용됩니다. 대부분 인수는 종종 함수와 함께 사용됩니다. 함수 호출 명령문과 함께 전달 된 값을 인수라고하며 매개 변수는 함수 정의의 값을 복사하는 변수 (정식 매개 변수라고 함)입니다.

int main ()
{
   /* local variable definition */
   int a = 100;
   int b = 200;
   int ret;

   /* calling a function to get max value */
   ret = max(a, b);

   printf( "Max value is : %d\n", ret );

   return 0;
}

/* function returning the max between two numbers */
int max(int num1, int num2) 
{
   /* local variable declaration */
   int result;

   if (num1 > num2)
      result = num1;
   else
      result = num2;

   return result; 
}

위의 코드에서 num1num2형식 매개 변수와 있습니다 ab실제 인수입니다.


3

Oracle의 Java 자습서는 이러한 구별을 다음과 같이 정의합니다. "매개 변수는 메서드 선언의 변수 목록을 나타냅니다. 인수는 메서드를 호출 할 때 전달되는 실제 값입니다. 메서드를 호출 할 때 사용 된 인수는 선언의 매개 변수와 일치해야합니다. 유형과 순서대로. "

매개 변수 및 인수에 대한 자세한 설명 : https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html


3

논리적으로 말하자면, 우리는 실제로 같은 것에 대해 이야기하고 있습니다. 그러나 나는 간단한 은유가이 딜레마를 해결하는데 도움이 될 것이라고 생각합니다.

은유를 다양한 연결점이라고 할 수 있다면 벽에 점을 연결하도록 동일화 할 수 있습니다. 이 경우 다음과 같이 매개 변수와 인수를 고려할 수 있습니다.

매개 변수 는 다양한 모양을 취할 수있는 플러그 포인트의 소켓입니다. 그러나 특정 유형의 플러그 만 적합합니다.
인수 는 특정 장비를 활성화하기 위해 플러그 포인트 / 소켓에 꽂는 실제 플러그입니다.


3

매개 변수는 함수 정의 의 변수 입니다.
인수는 매개 변수 의 입니다.

<?php

    /* define function */
    function myFunction($parameter1, $parameter2)
    {
        echo "This is value of paramater 1: {$parameter1} <br />";
        echo "This is value of paramater 2: {$parameter2} <br />";
    }

    /* call function with arguments*/
    myFunction(1, 2);

?>

3

일반적으로, 매개 변수와 인수라는 용어는 함수에 전달되는 정보를 의미하는 것으로 상호 교환 가능하게 사용됩니다.

그러나 함수의 관점에서 :

  • 매개 변수 함수 정의에서 괄호 안에 표시된 변수이다.
  • 인수 가 호출 될 때 함수에 전송되는 값입니다.

2

Java로 메소드 (함수)를 작성할 때 이와 같은 메소드 ..

data-type name of the method (data-type variable-name)

괄호 안에 이들은 매개 변수이며 메서드 (함수)를 호출하면이 매개 변수의 값을 인수라고합니다.


2

Joseph의 Alabahari 책 "C # in a Nutshell"(C # 7.0, p. 49)에 따르면 :

static void Foo (int x)
{
    x = x + 1; // When you're talking in context of this method x is parameter
    Console.WriteLine (x);
}
static void Main()
{
    Foo (8); // an argument of 8. 
             // When you're talking from the outer scope point of view
}

일부 인간 언어 (afaik Italian, Russian)에서는 동의어가이 용어에 널리 사용됩니다.

  • 매개 변수 = 공식 매개 변수
  • 인수 = 실제 매개 변수

내 대학 교수들은 두 가지 이름을 모두 사용합니다.


0

매개 변수는 함수가받는 변수이므로 함수 선언에 표시되며 데이터 형식의 변수 이름이 포함됩니다. 인수는 다른 함수에 전달되는 실제 값입니다. 그것이 함수 호출에서 볼 수있는 이유입니다. 데이터 유형이없는 값일뿐입니다.


0

함수의 형식 매개 변수는 함수 선언에 나열되며 함수 정의 본문에 사용됩니다. 공식적인 매개 변수 (모든 종류의)는 함수가 호출 될 때 무언가로 채워지는 일종의 공백 또는 자리 표시 자입니다.

인수는 형식 매개 변수에 채우기에 사용되는 무언가이다. 함수 호출을 기록하면 함수 이름 뒤에 인수가 괄호 안에 표시됩니다. 함수 호출이 실행되면 형식 매개 변수에 대한 인수가 연결됩니다.

값별 호출참조 별 호출 이라는 용어 는 플러그인 프로세스에서 사용되는 메커니즘을 나타냅니다. 값별 호출 방법에서는 인수 값만 사용됩니다. 이 값별 호출 메커니즘에서 공식 매개 변수는 해당 인수의 값으로 초기화되는 로컬 변수입니다. 참조 별 호출 메커니즘에서 인수는 변수이며 전체 변수가 사용됩니다. 기준 별 호출 메커니즘에서 인수 변수는 공식 매개 변수로 대체되므로 공식 매개 변수에 대한 변경은 실제로 인수 변수에 적용됩니다.


0

매개 변수 는 함수가 사용할 함수에 전달되는 데이터를 저장하는 데 사용되는 변수입니다. 인수 는 함수가 호출 될 때 함수에 전달되는 실제 데이터입니다.

// x and y are parameters in this function declaration
function add(x, y) {
  // function body
  var sum = x + y;
  return sum; // return statement
}

// 1 and 2 are passed into the function as arguments
var sum = add(1, 2);

0

나는 그것을 통해 생각하고 이전의 대답이 잘못되었음을 깨달았습니다. 여기 훨씬 더 나은 정의가 있습니다

{ 계란 한 상자를 상상해보십시오. 소시지 링크 팩 : 그리고 하녀 } 이것들은 다음과 같은 준비에 필요한 기능의 요소를 나타냅니다.

하녀는 방법입니다.

(당신은 __call_ 또는이 요청해야합니다 방법 (아침 식사를 만드는 행위가되어 있는지 확인의 아침 식사를) 함수 라는 요리 ) _

계란과 소시지는 매개 변수입니다 :

(알의 수와 소세지의 수는 __variable_이므로)

당신의 결정은 논쟁입니다 :

선택한 조리 된 계란 및 / 또는 소시지 수의 __Value_를 나타냅니다.

{ 니모닉 }

_ "하녀에게 전화해서 아침 식사를하라고 요청할 때, 그녀는 당신이 얼마나 많은 계란과 소시지를 먹어야하는지에 대해 __argues_합니다. 그녀는 콜레스테롤에 대해 걱정하고 있습니다."__

(인수는 선언하고 함수에 전달하기로 결정한 매개 변수의 조합에 대한 값입니다.)

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