[C#] Function

Maengkkong·2023년 11월 20일
0

C# 이론

목록 보기
1/1

Function_Method

  • funtion = Method이다.
  • static = 정적 한정자
using System;

class Function_Method
{
    static void Main()
    {
        for (int i = 0; i < 3; i++)
        {
            Hello();
        }
        
    static void Hello()
    {
        Console.WriteLine("쫗은 아침입니다.");
    }
    
  • 변수명은 소문자(ex : int name)로 작성하지만, 함수는 대문자(ex : static void Main())로 작성한다.
  • static 한정자 (= 정적 한정자)
  • static의 함수 코드의 순서 위치는 상관없다.
  • 현재 Hello는 특별한 Argument(인자)가 없다. 그래서 ()에 아무것도 없이 작성함.
    static void Main() //static 정적 한정자
    {
        for (int i = 0; i < 3; i++)
        {
            Hi();
        }
    }

    static void Hi()
    {
        Console.WriteLine("안녕하세요");
    }
}

return 값(반환 값)을 가지지 않는 것은 void 유일하다.

static void Hi(매개변수){}
메소드 안에는 매개변수가 들어간다.


Parameter 매개변수

using System;

class Parameters
{
	 // string name은 매개변수
     // static 한정자가 있는 Greeting은 매개변수가 있는 메소드이다.
     
    static void Greeting(string name) 
    {
        Console.WriteLine($"{name}님 안녕");
    }

    static void Main()
    {
        Greeting("홍길동");
        Greeting("임꺽정");
        Greeting("김구");
    }

함수 >= 메소드 (파라미터)
메소드는 함수에 속한다.

using System;

class Parameters
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 3; i++)
        {
            GetString(i);
        }
    }

	// 메모리에서 copy하기 때문에 타입만 같으면 된다.
    // Main의 i의 값이 int 타입
    static void GetString(int x) 
    {
    
    // argument : 파라미터에 들어갈 값
        Console.WriteLine($"{x}번째 호출입니다");
    }
}
  • stack에서 메모리를 copy를 하기 때문에, 메소드에서의 값을 copy해서 호출함
  • ()안에 값은 모두 parameter(매개변수)이다.
  • 함수를 사용하였을 때 순서
    (Main에서 먼저 시작 > GetString에서 호출 > Main에서 다 끝나면 > GetString의 내용 지워짐 > Main 내용 지워짐) > 만약 다시 호출한다면, 값 호출 > 지우기를 반복한다.

Return

void 외의 것들은 모두 반환값을 가지기 때문에 return을 사용한다.

using System;
using System.Xml.Linq;

class ReturnValue
{

	//void 외 다 return 값이 있다.
    static string GetString(string name)
    {
        //Console.WriteLine($"{name}님 안녕하세요");
        // return을 꼭 해줘야 한다.
        return $"{name}님 안녕하세요";
    }
    static void Main()
    {
        string name = GetString("홍길동");
        Console.WriteLine(name); // 호출
    }
}

class ReturnInt
{
    static int Square(int i)
    {
        int square = i * i;
        
        //Console.WriteLine($"{i}^2 = {square}");
        return square;
    }
    static void Main()
    {
        //int x = 10;
        //int result = x * x;
        //Console.WriteLine($"{x}^2 = {result}");

        int e = Square(10);
        Console.WriteLine($"i^2 = {e}");
    }
}

class Program
{
    static string GetString(int x)
    {
        return $"{x}번째 반환값입니다";
    }

    static void Main()
    {
        for (int i = 0; i < 3; i++)
        {
            string str_return = GetString(i);
            Console.WriteLine($"{str_return}");
        }
    }
}

static string GetString(int x){}

  • int x는 Main의 i가 숫자이기 때문에 같은 타입의 int를 사용
  • string은 return 값이 문자열이라서이다.

class Program
{
    static double Sum_double(double x, double y)
    {
        //double number = x + y;
        //return number;

        return x + y;
    }

    static void Main()
    {
        double Return_sum = Sum_double(3.0, 2.7);
        Console.WriteLine("입력값은 3.0, 2.7입니다");
        Console.WriteLine($"두 수의 합은 {Return_sum}");

    }
}

Min, Max

메소드를 구분하여 Min과 Max를 제작하여 따로 호출하였다.
한번에 두 개의 매개변수가 들어갈 경우 호출 메소드에서도 같은 형태로 제작해준다.

using System;

class MinMAx
{
    static int Max (int a, int b)
    {
        int max = (a >= b) ? a : b;
        return max;
    }


    static int Min(int a, int b)
    {
        int min = (a >= b) ? b : a;
        return min;
    }
    
    
    static void Main()
    {
        Console.WriteLine("첫 번재 정수값을 입력하세요");
        int input_1 = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("두 번재 정수값을 입력하세요");
        int input_2 = Convert.ToInt32(Console.ReadLine());

        int max = Max(input_1, input_2);
        int min = Min(input_1, input_2);

        Console.WriteLine($"입력하신 값은 {input_1} {input_2}");
        Console.WriteLine($"Max = {max}, Min = {min}");
    }
}

Default Parameter

	// DefaultParameter
    static void Show(string x, int level = 1)
    {
        Console.WriteLine($"{x}, {level}");
    }

    static void Main()
    {
        {
            Show("원주율");
            Show("원주율", 10);
            
        }
    }

만약, static void Show(string x, int level = 1)에서 level = 1의 값이 없었다면, 컴파일 오류가 뜬다.


NamedParameter

이름을 사용하지 않으면 코드의 순서대로 값이 대입된다.
이름을 정해주면 이름 설정한 순서대로 값을 대입된다.

using System;
class NamedParameter
{
    static void Divide(double first, double second)
    {
        double result = first / second;
        Console.WriteLine(result);
    }

    static void Main()
    {
        Divide(1.0, 2.0); //출력값 : 0.5
        Divide(2.0, 1.0); //출력값 : 2
        Divide(second: 2.0, first: 1.0); //출력값 : 0.5
    }
}

Method Overload

메소드의 이름이 같아도 자기에게 맞는 타입을 따라 들어가 반환된다.

using System;

class MethodOverload
{
    static void GetNumber(int x)
    {
        Console.WriteLine($"Int32 = {x}");
    }

    static void GetNumber(long x)
    {
        Console.WriteLine($"Int64 = {x}");
    }
    static void Main()
    {
        GetNumber(1234);
        GetNumber(1234L); // long Type
        //메소드의 이름은 같지만, 둘은 타입이 다르다.
    }
}

0개의 댓글