ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메서드
    C# 2023. 8. 16. 17:11

    I. 메서드

    : 특정한 작업을 수행하기 위해 사용되는 독립적인 기능 단위

    : 코드의 재사용성과 모듈화를 위해 사용.

     

     !! 메서드를 사용해야하는 이유

     1. 재사용이 용이함.

      : 동일한 작업을 직접 반복하지 않고, 필요할 때마다 해당 작업의 기능을 가진 메서드를 호출할 수 있음.

     2. 모듈화 가능.

      : 코드를 작은 단위로 분리하고 관리할 수 있음.

     3. 가독성과 유지보수성 증가.

      : 특정 작업을 메서드를 통해 대체할 수 있으므로, 코드가 간결해지고 가독성이 좋아짐.

      : 또한, 모든 반복되는 작업을 일일히 수정하는 것에서, 메서드를 사용함으로써 메서드만 수정하여 전체를 수정할 수 있게 됨.

     4. 코드의 추상화

      : 동일한 작업에 대해, 메서드이름을 통해 해당 작업이 어떤 작업을 하는 지 파악할 수 있음.

     

    II. 메서드의 선언과 호출

    "접근제한자" "static 여부" "리턴 타입" "메서드 이름"("매개변수")

     1. 접근 제한자(Access Modifier)

       : 객체 지향 프로그래밍에서 클래스의 멤버(필드, 메서드, 속성 등)에 대한 접근 권한을 지정하는 키워드
         
         1. public : 모든 외부의 접근을 허가함.
         2. private : 같은 클래스 내에서만 접근을 허가함.
         3. protected : 같은 클래스 내부와 파생 클래스에서 접근을 허가함.
         4. internal : 같은 **어셈블리 내에서 접근을 허가함.

          **어셈블리 (assembly)
           : NET 런타임 환경에서 실행할 수 있는 코드와 리소스, 메타데이터를 포장하고 배포하는 단위

     

     2. static 여부

       : 메서드가 정적인지 아닌지를 나타냄.

     

       **정적 메서드 (Static Method)

        : 특정 객체의 인스턴스와는 관계없이 호출할 수 있는 메서드.

    internal class MethodsBasic
    {
        static void Main(string[] args)
        {
            // 스태틱 메서드 Add 사용
            int plused = Calc.Add(3, 5);
            Console.WriteLine(plused);
    
            // 인스턴스 메서드 AddInstance 사용
            Calc calc = new Calc();                         // calc 라는 새로운 인스턴스 생성
            calc.SetElement(3);                             // 인스턴스에 숫자 3 추가
            calc.SetElement(5);                             // 인스턴스에 숫자 5 추가
            
            int result = calc.GetTotal();
            Console.WriteLine(result);
            
        }
    }
    
    class Calc
    {
        public static int Add(int a, int b)  // 스태틱 메서드
        {
            int sum = a + b;
            return sum;
        }
    
        private int total;
        
        public Calc()
        {
        	total = 0;
        }
        
        public void SetElement(int value)   // 인스턴스 메서드 
        {
        	total += value;
        }
        
        public int GetTotal()                // 인스턴스 메서드
        {
        	return total;
        }
    }

     

      3. 리턴 타입(Return Type)

       : 메서드가 반환하는 값의 데이터 타입을 지정하는 키워드

     

        1. void

          : 메서드가 반환하는 값이 없음.

    public void Greeting()
    {
        Console.WriteLine("안녕하세요");
    }

     

        2. 값 타입

           : 변수의 값을 매개변수로 보내, 메서드를 통해 직접 값을 반환

    public int Add(int a, int b)
    {
        return a + b;                                  // int 값 반환
    }
    
    public float Minus(int a, int b)
    {
        return a - b;                                  // float 값 반환
    }

     

        3. 참조 타입 (함수 선언시, 변하는 것 없음)

          : 객체나 클래스 인스턴스를 반환

          : 변수의 주소를 매개변수로 보내, 메서드를 통해 다시 변수의 메모리 주소를 반환

          : 즉, 참조 타입을 통해, 원본에 영향을 줄 수 있다.

    static void Main(string[] args)
    {
        int a = 3;
        int b = 5;
        Console.WriteLine("a : " + a);             // a : 3
        Console.WriteLine("b : " + b);             // b : 5
        
        Calc calc = new Calc();
        calc.Swap(ref a, ref b);
        Console.WriteLine("a : " + a);             // a : 5
        Console.WriteLine("b : " + b);             // b : 3 !! 참조값을 매개변수로 날려서, 값 자체를 바꿈.
    }
    
    
    class Calc
    {
        public void Swap(ref int a, ref int b)
        {
            int temp = b;
            b = a;
            a = temp;
         }
     }

     

        4. 기타

          : Tuple, ValueTuple, Dictionary 등과 같은 복합 데이터 형식 혹은, 자신이 사전에 정의한 구조체(Struct)를 메서드의 반환 타입으로 사용할 수 있다.

    // 매개변수로 구조체를 활용한 메서드 예시
    internal class MethodsBasic
    {
        static void Main(string[] args)
        {
    
            DataTypeManager dataTypeManager = new DataTypeManager();
            string dataName = "short";
            int[] dataInfo = { 2, -32768 };
            DataType newData = dataTypeManager.SetData(dataName, dataInfo);
    
            Console.WriteLine($"Data Type Name: {newData.typeName}");
            Console.WriteLine($"Byte Size: {newData.byteSize}");
            Console.WriteLine($"Minimum Value: {newData.minValue}");
        }
    }
    
    public struct DataType
    {
        public string typeName { get; set; }
        public int byteSize { get; set; }
        public int minValue { get; set; }
    }
    
    public class DataTypeManager
    {
        public DataType SetData(string dataName, int[] dataTypeArray)
        {
            DataType getNew = new DataType { typeName = dataName, byteSize = dataTypeArray[0], minValue = dataTypeArray[1]};
            return getNew;
        }
    }

    >

     

     4. 매개변수 (Parameters)

     : 메서드에 전달되는 입력 값.

     : 배열, 문자열, 구조체, 기본 데이터 형식 등을 매개변수로 사용 가능하다.

     : 반환 타입과 달라도 상관 없다.

    public int GetStringLength(string input)
    {
        return input.Length;
    }

     

     

    III. 메서드 오버로딩

     : 동일한 이름의 메서드를 다양한 매개변수 목록으로 다중 정의하는 개념.

     : 작업이나 기능은 동일하나, 입력값에 따라 다르게 동작해야 할 때 사용함.

    void PrintMessage(string message)
    {
        Console.WriteLine("Message: " + message);
    }
    
    void PrintMessage(int number)
    {
        Console.WriteLine("Number: " + number);
    }
    
    // 메서드 호출
    PrintMessage("Hello, World!");  // 문자열 매개변수를 가진 메서드 호출
    PrintMessage(10);  // 정수 매개변수를 가진 메서드 호출

     

    IV. 재귀 호출

     : 메서드가 자기 자신을 호출하는 것.

     : 따로, 종료 조건이 없거나 모호하다면, 무한루프에 빠지게 된다.

     

    void CountDown(int n)
    {
        if (n <= 0)
        {
            Console.WriteLine("Done");
        }
        else
        {
            Console.WriteLine(n);
            CountDown(n - 1);  // 자기 자신을 호출
        }
    }
    
    // 메서드 호출
    CountDown(5);

     

     

     

    'C#' 카테고리의 다른 글

    클래스와 객체  (0) 2023.08.17
    틱택토 게임 콘솔로 구현하기  (0) 2023.08.17
    컬렉션  (0) 2023.08.16
    조건문과 반복문  (0) 2023.08.15
    변수와 자료형  (0) 2023.08.15
Designed by Tistory.