본문으로 바로가기

C# 메소드(Method)에 대해서. 메인사진

 

 

안녕하세요. 애드라이프 입니다.

이전 포스팅에서 Jump문에 대해서 배웠는데요.

간편하다고 마구마구 남용하면 않좋다는거

꼭! 기억하시고 넘어갔으면 좋겠습니다.

혹시 이전 포스팅이 더 궁금하시다면 아래 링크를 참고해 주세요.

[C# 프로그래밍] - C# 프로그램 시작하기 - Jump문 알아보기 #8

 

C# 프로그램 시작하기 - Jump문 알아보기 #8

안녕하세요. 애드라이프 입니다. 이전 포스팅에서 반복문(루프문)에 대해서 알아 보았습니다. 이해하는데 어려움은 없으셨나요? 혹시 아직 이해가 안되셨거나 이전 포스팅이 궁금하시다면 아래 링크를 참고해주세..

increase-life.tistory.com

 

이번 포스팅에서는

계속 다음에 다룬다고 넘어갔던 메소드(Method)

관해서 다루도록 하겠습니다. :)

 

이전에 잠깐 설명 드렸었는데요.

메소드는 간단히 말하면 C,C++의 함수와

같다고 설명했습니다.

그럼 이번엔 자세히 한번 살펴 보겠습니다.

 

[ 기본 구조 ]

메소드 기본구조

기본적으로 메소드는 클래스 안에서 선언됩니다.

그럼 구조를 하나씩 보겠습니다.

한정자 : 메소드 자체의 속성을 부여하는 부분(지금은 이정도만 알면 됩니다.)

반환형식 : 메소드가 종료될때 반환되는 데이터 형식

메소드이름 : 메소드의 이름을 정의

매개변수 : 메소드에 데이터를 입력하는 형식 지정

return : Jump문의 일종으로 선언되면 메소드를 종료시키고 빠져나오는 역할

 

이해를 돕기위한 예제를 보도록 하겠습니다.

using static System.Console;

namespace Method_basic
{
    class Program
    {
        public static int PrintScreen(string name, string age)
        {
            if (name == "" || age == "")
            {
                WriteLine("이름과 나이를 모두 입력해주세요.");
                return 0;
            }
            else
            {
                WriteLine($"이름: {name},나이: {age}");
                return 1;
            }
            
        }
        static void Main(string[] args)
        {
            int err = 2;
            err = PrintScreen("애드라이프", "");
            if (err == 0) WriteLine("입력오류입니다.");
            err = PrintScreen("애드라이프", "100");
            if (err == 0) WriteLine("입력오류입니다.");

        }
    }
}

 

프로그램을 살펴보겠습니다.

이전 포스팅과는 다르게 class안에

두개의 메소드가 선언되어있습니다.

하나는 항상 보던 Main문이고

하나는 새롭게 생긴 printScreen이라는 메소드입니다.

 

앞서 기본 구조를 설명드렸으니

구조대로 분리해 보도록 하죠.

 

한정자 : public static

반환형식 : int

메소드이름: PrintScreen

매개변수 : string name, string age

retrun : 0, 1

 

한정자인 public static는 인스턴스화가 불가능한 정적한정자 입니다.

반환형식은 우리에게 익숙한 int형으로 선언되었구요.

메소드 이름은 PrintScreen 이라는 이름을 가지고 있네요.

매개변수는 문자열로 이름과 나이를 받게 되어있고

조건에 따라 retrun형식은 0과 1로 나뉘어 있습니다.

 

결과를 보면서 좀 더 설명 드리도록 하겠습니다.

C# 메소드 기본 프로그램 결과

생성한 PrintScreen이라는 메소드에

매개변수를 전부 입력하지 않으면 

이름과 나이를 모두 입력해 달라는 문구와 함께

int형식 0을 반환합니다.

그 값을 이용하여 다시 "입력 오류입니다."라는 문구를

띄울지 조건문이 사용되고 있습니다.

 

기본적으로 쓰이는 메소드(Method)의 기능을

프로그램으로 작성한 결과 입니다.

 

조금은 메소드가 뭔지 이해가 되시나요?

 

조금 더 나아가서 매개변수에 대해 자세히

알아보도록 하겠습니다.

 

만약 아래와 같은 프로그램이 있다고 가정합니다.

static void change(int c,int d)
{
    int e = d;
    d = c;
    c = e;
}
static void Main(string[] args)
{
    int a = 1;
    int b = 2;
    change(a, b);
    WriteLine($"a={a},b={b}");
}

이런 경우 a와 b의 값은 어떻게 될까요?

처음 선언한 a=1,b=2와 변함이 없습니다.

이유는 change라는 메소드에서 a,b를 매개변수로

받지만 a,b 그리고 c,d는 서로 다른 메모리를 가지고

값을 단순이 복사하고 있기때문입니다.

그래서 change메소드에서 숫자를 아무리 바꾼들

a,b에는 영향이 미치지 못하게 되는것이죠.

 

그럼 변화가 있게 하려면 어떻게 해야할까요?

이전 포스팅에서 배웠던 참조형식을 기억하시나요?

 기억이 안나시는 분들은 아래 포스팅 참고해주세요.

[C# 프로그래밍/기초 다지기] - C# 프로그램 시작하기 - 데이터 형식 익히기 #3

 

C# 프로그램 시작하기 - 데이터 형식 익히기 #3

안녕하세요. 애드라이프 입니다. 이전 포스팅에서 간단한 콘솔 프로그램을 제작해 보았고 실행해서 결과까지 지켜 보았는데 어려웠나요?? 어려웠다면 차근차근 처음부터 다시 봐보시길 추천드려요! 댓글로 질문하..

increase-life.tistory.com

 

데이터를 유지하기 위한 수단중 하나로

참조형식을 사용했었는데요. 이번에는

ref키워드를 이용해서 참조형식의 도움을 받아 보겠습니다.

static void change(ref int c,ref int d)
{
    int e = d;
    d = c;
    c = e;
}
static void Main(string[] args)
{
    int a = 1;
    int b = 2;
    change(ref a, ref b);
    WriteLine($"a={a},b={b}");
}

선언된 변수 앞에 ref라는 문구가 붙었습니다.

이 변화만으로 c,d는 단순히 a,b를 복사해 다른

메모리를 사용하던 변수에서

a.b를 참조하는 변수로 바뀌었습니다.

스택메모리에서 힙영역의 원본의 값을 참조할 수있게 된것입니다.

위와 같이 프로그램을 작성하게 되면 

change에서 바꾼대로 a,b의 값은 변경될 것입니다.

 

자! 입력으로 받는 매개변의 참조형식을 보았는데요.

그럼 출력도 참조형식으로 다룰수 있지 않을까요?

 

이 부분은 프로그램과 함께 바로바로 설명하도록 하겠습니다.

using static System.Console;

namespace output_method
{
    class Human
    {
        private int age = 20;
        public ref int GetAge() //매소드 생성시 반환형식 앞에 ref 붙임
        {
            return ref age;     //리턴시에도 반환하고자 하는 변수 앞에 ref 붙임
        }
        public void PrintAge()
        {
            WriteLine($"Age: {age}");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Human addlife = new Human();
            ref int Local_Age = ref addlife.GetAge();   //반환의 참조형식 선언 방법
            int Nomal_Age = addlife.GetAge();           //반환된 값을 단순히 변수에 대입

            addlife.PrintAge();
            WriteLine($"Local Age : {Local_Age}");
            WriteLine($"Nomal Age : {Nomal_Age}");

            Local_Age = 30;                             //반환된 값을 참조한 변수를 변경

            addlife.PrintAge();
            WriteLine($"Local Age : {Local_Age}");
            WriteLine($"Nomal Age : {Nomal_Age}");
        }
    }
}

 

핵심적으로 필요한 부분은 프로그램의 주석에

추가해 놓았으니 꼭 읽어 보시구요.

해당 프로그램의 목적생성한 메소드의 결과를

참조형식으로 반환하고 그 반환된 결과를

또 참조형식의 변수에 활용하므로서

메소드 밖에서의 값의 변화에 대응할 수 있게

프로그램을 작성해준것이 됩니다.

 

계속해서 포스팅을 작성하다 보니 좀 길어진 감이 있네요.

한 포스팅이 너무 많은 내용을 담고 있고 길어지면

지루해 지기때문에 나머지 메소드에 대한 내용은

다음 포스팅에서 이어서 하도록 하겠습니다.

 

다음에는 더 유익한 포스팅으로 돌아오겠습니다.

by 애드라이프

구독과 공감버튼 눌러주세요!!

 

<!-- 티스토리 중간 광고 서식