ABOUT ME

C#, JAVA, Python, 코딩테스트, 일상 등 IT관련 블로그 입니다. 안녕하세요. 새싹개발자 입니다. 힘냅시다 빠샤! 주꾸미 발처럼 이것저것 콕콕 찔러보며 기록하고자 합니다

Today
Yesterday
Total
  • [C#] 일반화(2)
    C# 2022. 1. 25. 10:38
    728x90

    저번시간에 이어 일반화에 대해 좀 더 알아보겠습니다.

     

    저번에는 특정 메소드에 대해서만 일반화를 진행했는데 이번에는 Class자체의 일반화,

    그리고 일반화에 대한 제한사항 설정에 대해 알아보겠습니다.

     

    Class의 일반화 사용방법은 간단합니다.

     

    class 클래스이름 <형식 매개변수>

    {

        //

    }

     

    이런 구조입니다.

     

    class 일반화는 어디서 사용할까요? 한가지 예시 코드를 보여드리겠습니다.

        class Array_Int
        {
            private int[] array;
            public int GetElement(int index)
            {
                return array[index];
            }
        }
        class Array_Double
        {
            private double[] array;
            public double GetElement(int index)
            {
                return array[index];
            }
        }

    입력받은 index값을 통해 특정한 위치의 array값을 리턴해준다는 공통점이 있는 코드들입니다.

    그러나 자료형이 달라서 결국은 다른 클래스로 정의하게 됐네요.

    class를 일반화 시킨 형태입니다. 자료형에 T를 치환해 준걸 확인하시면 되겠습니다.

        class Array_Generic<T>
        {
            private T[] array;
    
            public T GetElement(int index)
            {
                return array[index];
            }
    
        }

    이렇게 사용하시면 되겠습니다.

     

    메인구성은 객체 생성하듯 사용하시면 되겠습니다.

    다만 <T>를 대처 할 수 있는 자료형을 넣어준다는 점을 주목하시면 되겠습니다.

    실제로는 array를 메소드 안에 정의해 구현결과는 찾을 수 없겠네요.

            static void Main(string[] args)
            {
                Array_Generic<int> intArr = new Array_Generic<int>();
                Array_Generic<double> dblArr = new Array_Generic<double>();
    
                intArr.GetElement(3);
                dblArr.GetElement(6);
            }

     

    그렇다면 일반화는 무조건으로 다 사용할 수 있게 해야할까요?

    Where을 통해 설정 할 수 있다고하네요.

    where T : struct T는 값 형식
    where T: class T는 참조형식
    where T: new() T는 매개변수가 없는 생성자
    where T : 기반_class_이름 T는 명시한 기반class의 파생class
    where T : 인터페이스_이름 T는 명시한 Interface를 반드시 구현
    where T : U T는 또다른 매개형식, 매개변수 U로부터 상속받은 class여야 한다.

    참고해 주시면 되겠습니다.

     

    다음에는 일반화 컬렉션에 대해 알아보겠습니다. :D

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

    댓글

Designed by Tistory.