케이스 가드(switch, when), Tryparse() 메소드, out 키워드

00·2024년 12월 9일

C#

목록 보기
33/149
using System; 
using static System.Console;

namespace Hello 
{
    class MainApp /* MainApp이라는 클래스(c#프로그램을 구성하는 기본단위)를 만듦.
                     클래스: 데이터와 데이터를 처리하는 기능(메소드)으로 구성됨.*/
    {
        static void Main(string[] args) //Main() 메소드. c의 Main함수랑 비슷.
                                        //static은 한정자. 메소드나 변수 등을 수식.
                                        // static 키워드로 수식되는 코드는 프로그램이 처음 구동될 때부터 메모리에 할당된다. 
        {
            object obj = null; //어떤 타입의 값이든 저장할 수 있는 obj라는 변수를 선언하고 초기화
            string s = Console.ReadLine(); //Console.ReadLine()은 콘솔에서 사용자의 입력을 한 줄 읽어오는 메서드
                                           //사용자가 Enter 키를 누를 때까지 입력한 모든 문자를 문자열로 반환문자열 입력 받음
                                           //Console.ReadLine() 메서드가 반환한 문자열을 s 변수에 저장


            if (s != null) //Console.ReadLine()의 결과값 s가 null인지 확인
                           //s가 null이 아닌 경우에만 int.TryParse()와 float.TryParse() 메서드를 호출
            {


                if (int.TryParse(s, out int out_i)) //Tryparse()는 Parse()와 같은 기능(문자열을 숫자로 변환).
                                                    //out 키워드는 출력 전용 매개변수임을 나타내는 용도로 쓰임
                                                    //int.TryParse() 메서드 내부에서 out_i 변수에 변환된 값을 저장하여
                                                    //메서드 외부에서도 사용할 수 있도록 하는 것
                                                    //out 키워드는 함수의 매개변수에 사용되는 키워드이긴 하지만, 일반적인 매개변수와는 조금 다른 역할을 합니다.
                                                    //일반적인 매개변수는 함수에 값을 전달하기 위한 용도로 사용됨. 즉, 함수를 호출할 때 매개변수에 값을 넣어서 함수 내부에서 사용하도록 하는 것.
                                                    //반면 out 키워드는 함수에서 값을 반환하기 위한 용도로 사용됨.즉, 함수 내부에서 out 키워드로 지정된 매개변수에 값을 저장하면,
                                                    //함수 호출 후에 그 값을 외부에서 사용할 수 있게 됨.
                    obj = out_i;


                else if (float.TryParse(s, out float out_f)) //int로 Tryparse()를 지정하니까 실수를 넣어도 모르는 형식이라고
                                                             //출력됨. 따라서 float.Tryparse()로 수정했음.

                                                            
                    obj = out_f; //obj 변수에 3.14가 저장됨

                //float.TryParse()는 문자열을 float 타입으로 변환하는 메서드인데, 변환에 성공하면 true를 반환하고, 실패하면 false를 반환
                //out float out_f는 out 키워드를 사용하여 out_f 변수를 출력 전용 매개변수로 지정하는 것입니다.
                //즉, float.TryParse() 메서드 내부에서 out_f 변수에 변환된 값을 저장하여 메서드 외부에서도 사용할 수 있도록 하는 것
                //out float out_f 부분은 s 문자열이 실수로 변환될 경우, 그 변환된 값을 저장할 out_f라는 변수를 선언하는 것.
                //따라서 float.TryParse(s, out float out_f) 가 성공적으로 실행되었다면, out_f 변수에는 변환된 실수 값이 저장됨.

                //TryParse() 메서드는 변환 성공 여부( true 또는 false)를 반환하기 때문에, 변환된 값을 얻으려면 out 키워드를 사용하여 변수를 지정해야 함!!


                //s가 "3.14"와 같이 실수 형태라면 float.TryParse(s, out float out_f)는 true를 반환하고,
                //out_f에는 3.14라는 값이 저장됩니다.
                //그 후 obj = out_f;를 통해 obj 변수에 3.14가 저장됩니다.

                else
                    obj = s;
            }
            

            switch (obj) 
            {
                case int:
                    Console.WriteLine($"{(int)obj}는 int 형식입니다.");
                    break;

                case float f when f>=0: //obj가 float 형식이며 0보다 크거나 같은 경우
                    Console.WriteLine($"{(float)obj}는 양의 float 형식입니다.");
                    break;
                case float: 
                    Console.WriteLine($"{(float)obj}는 음의 float 형식입니다.");
                    break;
                default:
                    Console.WriteLine($"{(obj)}(은)는 모르는 형식입니다.");
                    break;

            }
        }
    }
}
코드를 입력하세요

0개의 댓글