3월 14일 #함수

sejun-Lee·2025년 3월 14일
post-thumbnail

함수 (Function)

  • 미리 정해진 동작을 수행하는 코드 묶음
  • 어떤 처리를 미리 함수로 만들어 두면 다시 반복적으로 사용 가능
        static void PrintJoke()    // void = 비어있다. 결과가 필요없다
        {           //함수명 () ->요구하는 값 , 함수명은 대문자로 시작!
            Console.WriteLine("밤에 성시경이 두명 있으면?.");
            Console.Write("야간");
            Console.Write("투");
            Console.WriteLine("시경");
        }
        static void GradeMyJoke(string input)    // 형식 매개변수명
        {
            Console.WriteLine("당신의 농담은 " + input + " 입니다");
        }
        
        
        static void Main(string[] args)
        {
            printJoke();
			//밤에 성시경이 두명 있으면?
            //야간투시경
            string gread = "최악";
            GradeMyJoke(gread);
            //당신의 동담은 최악 입니다.
            GradeMyJoke("취향저격");
            //당신의 동담은 취향저격 입니다.
        }

        static void MoveLeft()
        {
            Console.WriteLine("좌측으로 이동");
        }
        static void MoveRight()
        {
            Console.WriteLine("우측으로 이동");
        }
        static void MoveForward()
        {
            Console.WriteLine("앞으로 이동");
        }
        static void MoveBackward()
        {
            Console.WriteLine("뒤로 이동");
        }
        
        
        static void Main(string[] args)
        {
             while (true)    //무한히 계속 움직이기 가능 -> 게임 캐릭터가 이동하는 원리
                {
                    switch (Console.ReadKey(true).Key)    //누르는 키를 확인하여 입력
                    {                   // true 입력시 누르는 키까지명까지 출력으로 보이 않음
                        case ConsoleKey.W:
                        case ConsoleKey.UpArrow:
                            MoveForward();
                            break;
                        case ConsoleKey.A:
                        case ConsoleKey.LeftArrow:
                            MoveLeft();
                            break;
                        case ConsoleKey.S:
                        case ConsoleKey.DownArrow:
                            MoveBackward();
                            break;
                        case ConsoleKey.D:
                        case ConsoleKey.RightArrow:
                            MoveRight();
                            break;
                        case ConsoleKey.D1:
                            Skill1();
                            break;
                    }
                }
        }

        static void TripleShot(int first, int second, int third)
        {   // void는 리턴이 없음. 그냥 실행시키는 용도, void 반환형
            Console.WriteLine("때리기! 데미지 {0}", first);
            Console.WriteLine("찌르기! 데미지 {0}", second);
            Console.WriteLine("베기! 데미지 {0}", third);           
        }


		static void Main(string[] args)
        {
             //삼연타
            TripleShot(10, 20, 5);   //코드가 간단하게 줄어듬.
            //때리기, 찌르기, 베기 한번에 실행
            TripleShot(100, 5, 0);   //코드에 변경이 필요할때 함수 안 코드 하나만 바꾸면 됨. 수정에 용의함.
            TripleShot(30, 30, 30);
		}

        static string MakeFishCake(string taste, float time)
        {
            if (taste=="")
            {
                Console.WriteLine("앙금없는 붕어빵은 만들수 없습니다.");
                return "오류";
            }
            Console.WriteLine("반죽물을 붓습니다.");
            Console.WriteLine($"{taste} 앙금을 넣습니다.");    // 아래 2가지 방법중 선택
            if (time < 15)
            {
                Console.WriteLine($"익을때까지 {time} 초 기다립니다.");
                Console.WriteLine("{0} 붕어빵 완성!!", taste);
                return $"{taste} 붕어빵";
            }
            else
            {
                Console.WriteLine($"익을때까지 {time} 초 기다립니다.");
                Console.WriteLine("탄 붕어빵 완성!!");
                return "탄 붕어빵";
            }
        }
        
        
        static void Main(string[] args)
        {
        	MakeFishCake("팥", 10);
            //팥 붕어빵
            Console.WriteLine();
            MakeFishCake("슈크림", 15);
            //탄 붕어빵
        }
        

        static int TotalDamaage(int basicAttack, int equipAttack, int level)
        {
            return (level/2) * basicAttack * equipAttack;
        }
		
        
        static void Main(string[] args)
        {
          int totalDamage = TotalDamaage(10, 20, 3);
          Console.WriteLine("총 대미지는 {0} 입니다.", totalDamage);
        }

		 static float Area(float height, float width)
        {
            return height * width;
        }
        
        
        static void Main(string[] args)
        {
        	Console.WriteLine("사각형의 넓이는 {0} 입니다.", Area(10.5f, 11f);
        }      

        static int Function()
        {
            //리턴에 도달하기 전까지 코드가 순차적으로 진행
            
            Console.WriteLine("리턴1");
            Console.WriteLine("리턴2");
            return 10;
            
            //return 이 있으면 return 후의 코드는 실행 안됨
            
            Console.WriteLine("리턴3");
            Console.WriteLine("리턴4");
        }
        
        
        static void Main(string[] args)
        {
            //함수 단위 디버깅 F10  프로시저단위 실행 - 함수단위X 큰 흐름만 집중해서 코드를 보는방식
            Function();
            Function();
            Function();
        }     

<반환형 (Return Type)>

  • 함수의 결과(출력) 데이터의 자료형
  • 함수가 끝나기 전까지 반드시 return을으로 반환형에 맞는 데이터를 출력해야함
  • 함수진행 중 return을을 만나는 경우 그 즉시 결과 데이터를 반환하고 함수가 종료됨
  • 함수의 결과(출력)이 없는 경우 반환형은 void이며 return을 생략가능
        static int Function()
        {
            Console.WriteLine("1");
            Console.WriteLine("2");
            Console.WriteLine("3");
            return 5;   //return 은 단 하나만 가능
        }
        
        
        static void Main(string[] args)
        {
            int result = Function();
            Console.WriteLine("함수의 결과는 {0}", result);	// 5
        }     

        static string GetPi()
        {
            return "안녕하세요";
        }
        
        
        static void Main(string[] args)
        {
            string result = GetPi();

            Console.WriteLine(result);
            //안녕하세요
        }       

        static void PrintProfile(string name, string phone)
        {	// void 반환형
            if (name == "")
            {
                Console.WriteLine("이름을 입력해주세요");
                return;     // void 반환형에서 return을 진행하는 경우 함수 종료의 역할
            }
            Console.WriteLine($"이름: {name}, phone : {phone}");
        }   //void 반환형의 함수는 return을 생략가능

<매개변수 (Parameter)> + out ~

  • 함수에 추가(입력)할 테이터의 자룔형과 변수명
  • 같은 함수에서도 매개변수 입력이 다름에 따라 다른 처리가 가능
        static int Divide(int left, int right, out int remain)  //out 은 출력용도
        {
            remain = left % right;  // 나머지
            return left / right;    // 몫

            //return Left % right;    // return은 원칙적으로 하나만 가능
        }
		
        
        static void Main(string[] args)
        {
            int result;
            int remain;

            result = Divide(11, 3, out remain);
            Console.WriteLine("11/3은 몫{0} 나머지 {1}", result, remain);
        }        

        //ref => 복사가 아닌 바로가기 - 바꾸면 원본도 바뀜
        static void Swap(ref int left, ref int right)
        {
            int temp = left;
            left = right;
            right = temp;
            //left를 담을 임시 공간을 만들어서 left와 right 위치를 바꿈
        }
        
        
        static void Main(string[] args)
        {
            //ref -> 원본 전달 기능(Call by Reference, Call by Value, 바로가기)
            //일회용으로 쓰지 않고 바꾸면서 계속 써야할 때
            int a = 10;
            int b = 20;

            //두 숫자를 교체하는 기능
            Swap(ref a, ref b);

            // a : 20, b : 10
            Console.WriteLine("a : {0}, b : {1}", a, b);
        }        

        static void Main(string[] args)
        {
			//기본 입력 방식
            Console.WriteLine("숫자를 입력해주세요.");
            string input = Console.ReadLine();
            int number;
            int.TryParse(input, out number);    //input 이 이상이 없다면  number로 입력
         }






profile
초보 개발자

0개의 댓글