C#교과서 마스터하기 11. 함수(function, method)

min seung moon·2021년 7월 10일
0

C#

목록 보기
11/54

https://www.youtube.com/watch?v=9iHHKlFF2Ro&list=PLO56HZSjrPTB4NxAsEP8HRk6YKBDLbp7m&index=38

1. 함수(function, method)

  • 반복해서 사용하도록 만들어진 하나 이상의 문을 포함하는 코드 블록
  • 부 프로그램(sub program), 함수, 프로시저
    • 함수란 어떤 값을 받아서 그 값을 가지고 가공을 거쳐 어떤 결과값을 반환시켜 주는 코드
    • 함수는 프로그램 코드 내에서 특정한 기능을 처리하는 독립적인 하나의 단위 또는 모듈

2. 함수의 실행 단계

  • 입력 -> 처리 -> 출력

3. 함수 : 메서드(Method)

  • 부 프로그램의 종류 : 프로시저(procedure)와 함수(function)
    • 프로시저 : 반환 값이 없는 함수
    • 함수 : 반환 값이 있는 함수
  • 함수(메서드)
    • 어떤 특정한 로직을 모아놓은 프로그램 코드
    • C# / Java에서는 함수보다는 메서드라고 부름, 같은 클래스 안에서의 메서드를 함수로 부름
  • 함수의 종류
    • 내장 함수
      • 닷넷에 내장 되어 있는 모든 메서드
    • 사용자 정의 함수, 사용자가 필요할 때마다 새롭게 기능을 추가시켜 사용하는 메서드
      • 매개변수가 없는 함수
      • 매개변수가 있는 함수
      • 반환값이 있는 함수

4. 메서드 선언(Declaration)과 호출(Call)

  • Main()도 메서드
    • 새로운 메서드도 Main과 같은 형식으로 정의 됨
  • 메서드 선언 후에 할 수 있는 사항들
    • 같은 클래스 안에 있는 메서드 호출
      • 괄호안에 파라미터 목록을 사용한 메서드 이름 사용
    • 다른 클래스 안에 있는 메서드 호출
      • 반드시 컴파일러에게 해당 메서드를 포함하는 클래스의 이름을 지정해주어야 한다
      • 호출되는 메서드는 반드시 public 키워드로 선언되어야 한다
    • 중첩 호출 가능
      • 중첩 호출 가능
      • 메서드가 또 다른 메서드를 호출 가능
using System;
using static System.Console;

namespace testProject
{
    class Program
    {
        static void Sum()
        {
            WriteLine("함계 구하는 함수");
        }
        static void Main(string[] args)
        {
            Sum();
        }
    }
}

5. 매개 변수(파라미터) 정의 및 호출

  • 파라미터 정의
    • 메서드명 다음에 나오는 괄호안에 위치
    • 각 파라미터에 데이터형과 이름 지정
  • 파라미터를 사용한 메서드 호출
    • 각 파라미터에 값이 전달 된다
using System;
using static System.Console;

namespace testProject
{
    class Program
    {
        static void Sum(int num1, int num2) => WriteLine($"{num1} + {num2} = {num1+num2}");
        
        static void Main(string[] args)
        {
            Sum(1, 2);
        }
    }
}

6. 반환 값

  • 반환 값이 있는 메서드 선언
  • return 키워드를 구문에 추가
    • 반환 값 설정
    • 호출한 곳으로 반환값 반환
  • 반환값이 있는 메서드는 반드시 값을 리턴해야 함
using System;
using static System.Console;

namespace testProject
{
    class Program
    {
        static int Sum(int num1, int num2)
        {
            return num1 + num2;
        }
        
        static void Main(string[] args)
        {
            int sum = Sum(1, 2);
            WriteLine($"합계 : {sum}");
        }
    }
}

7. 메서드 오버로드(여러 번 정의)

  • 클래스 안에서 메서드 이름 공유 : 다중 정의
    • C++ / C# / Java
      - 컴파일러는 매개 변수의 타입으로 구분해서 호출
using System;
using static System.Console;

namespace testProject
{
    class Program
    {
        static int Sum(int num1, int num2) => (num1 + num2);
        

        static int Sum(int num1, int num2, int num3)
        {
            return num1 + num2 + num3;
        }
        
        static void Main(string[] args)
        {
            int sum = Sum(1, 2);
            WriteLine($"합계 : {sum}");

            sum = Sum(1, 2, 3);
            WriteLine($"합계 : {sum}");
        }
    }
}

8. 재귀(Recursion)

  • 재귀 함수
    • 함수는 자기 자신을 다시 호출할 수 있음
      • 재귀 호출 : 함수가 자기 자신을 다시 호출
  • 재귀 호출 언제 사용하는가?
    • 재귀 호출은 일반적으로 사용하지 않아도 반복문만 잘 써도 됨
    • 사용(효율적)
      • Tree 구조 탐색
      • HTML DOM 구조 탐색
    • 비사용(비효율적)
      • 피보나치 수열
      • 일부러 시간 오래 걸리는 작업 테스트용으로 적합
using System;
using static System.Console;

namespace testProject
{
    class Program
    {
        static void CountDown(int count)
        {
            if (count == 0) WriteLine("END");
            else
            {
                WriteLine(count);
                CountDown(count - 1);
            }
        }
        
        static void Main(string[] args)
        {
            CountDown(10);
        }
    }
}

9. 명령줄 인수(Command-Line Argyments)

  • 명령줄 인수, 애플리케이션 인수
  • 런타임시 명령줄 인수를 Main 메서드로 전달
    • Main 메서드는 매개변수로 문자열 배열을 전달 받음
profile
아직까지는 코린이!

0개의 댓글