C#

C# 매개변수와 참조, 출력

KJaebee 2022. 6. 1. 01:39

매개변수

매개변수(Parameter)

파라미터 값이라고도 부름

이 매개변수는 메소드의 구성 중 하나

 

void 메소드(매개변수)

 

매개변수가 없이 사용할 수 있는 메소드가 있긴 하나

매개변수가 없는 메소드는 거의 없다

 

그 이유는 어떠한 목적을 가지고 메소드를 만드는데에 목적을 이루려면

목적이 생기기 위한 어떠한 계기라는게 있다.

이는 어떠한 값을 받아서 그 값으로 무언가 결과를 얻어 내기 위해서 생김.

그렇기에 매개변수는 왠만하면 메소드에 들어가 있음.

없다면 출력을 위해서 사용하는 메소드 정도.

 

class operation

{

    public static int Plus(int a, int b)

    {

        return a + b;

    }

}

 

이때 int a, b는 하나의 매개체가 됨. 바로 파라미터 값.

이 값은 메소드 Plus에 값의 정보를 준다.

 

이 개념을 보통 Call by Value 라고 함.

 

한 마디로 int a 와 b 의 메모리 공간에 값을 제공하지 메모리 공간 자체는 제공하지 않는다.

 

오직 받은 값으로 연산을 해서 반환을 하는게 일반적인 매개변수.

 

그래서 특별한 기능을 가진 참조라는게 존재하는데

이 참조는 메로리 공간 자체를 제공해주게 만들 수 있다.

참조의 키워드는 ref reference의 줄인 말.

이 참조 키워드를 사용해서 매개변수를 전달하는 행위를 

Call by Reference 라고 함.

 

그리고 주의할 점이 있는데 매개변수를 줄 때 초기화를 하지 않으면 문법 오류가 남.

 

실제로 메모리 공간에 영향을 줌.

메소드에서 a의 값을 변경 했을 뿐임.

 

이를 증명하는 문제로는 보통 스왑

두 수를 서로 바꾸는 문제로 많이 나옴.

 

참조된 매개변수까지 알아봤으니

이제 메소드의 결과를 참조해보겠음

 

참조 지역 변수

이 참조 지역 변수는 리턴값을 참조하는 행위를 말함.

 

이 참조 지역 변수는 결과값을 어느 한곳에서 수정을 한다면 모두 바뀌게 하는 기능이 있다.

 

예를 들어서 어떤 유저가 RPG게임에서 히든피스를 발견해서 모든 아이템이 10%할인 된다고 생각해보자

 

private로 선언된 변수에 외부에서 직접적으로 접근해서 값을 바꿀 수 있음

이는 클래스의 한정자를 배우게 되면 알게 됨.

 

이러한 특징을 가진 변수를 참조 지역 변수라고 함.

 

출력 전용 매개변수

출력 전용 매개변수는 키워드 out을 사용하는데

역할은 ref와 비슷하지만 몇 가지 장점이 있음

 

우선 "출력 전용" 이라는 단어를 생각해보자면 이 매개변수는 오로지 출력을 위해 존재하는 키워드 같다. 즉, 읽기가 안됌.

 

에러가 나는 모습

에러가 나는 이유는 출력 매개변수인 out의 사용법이 잘못 됐기 때문.

 

//-------------------------------------------------------------------------------------------//

키워드 out

argument 값은 초기화를 하지 않아도 된다.

출력 전용 매개변수라서 읽기 작업을 하지 못한다.

출력으로 사용된 매개변수는 쓰기 작업을 해줘야한다.

------------------------------------------------------------------------------------------------

키워드 ref

argment 값은 초기화를 해야한다.

//------------------------------------------------------------------------------------------//

 

출력 전용 매개변수인데 OutTest 메소드에서는 읽기를 시도했다.

따라서 컴파일 에러가 나는 것.

 

또한 출력을 위해서 사용된 out 변수의 쓰기 작업을 하지 않으면 에러가 남.

 

 

'C#' 카테고리의 다른 글

C# 로컬 함수  (0) 2022.06.01
C# 메소드 오버로딩  (0) 2022.06.01
C# 연산자  (0) 2022.05.02
C# 메소드  (0) 2022.04.29
C# 문자열 보간, 서식, 분할, 변형, 찾기  (0) 2022.04.27