윈도우즈프로그래밍#11

LeeMir, 22 April 2021

고급 프로그래밍 기법


제네릭
  • 변수의 형을 매개변수로 하여 클래스나 메소드의 알고리즘을 자료형과 무관하게 기술하는 기법
  • 형 매개변수
    • 클래스 내의 필드나 메소드 선언 시 자료형으로 사용
    • ’<’과 ‘>’ 사이에 형 매개변수의 이름을 기술
  • 제네릭의 장점
    • 알고리즘의 재사용성을 높임
    • 자료형에 따른 프로그램의 중복을 줄임
    • 프로그램의 구조를 단순하게 만듦
제네릭 클래스
  • 형 매개변수(type parameter)를 가지는 클래스
    • 형 매개변수를 이용하여 필드나 지역변수에 사용
    • 실제 형 정보는 객체 생성 시에 전달받음
  • 형식 매개변수 형(formal parameter type)
    • 제네릭 클래스를 선언할 때 사용한 형 매개변수
    • class SimpleGeneric<T> {...}
  • 실제 형 인자(actual type argument)
    • 제네릭 클래스에 대한 객체를 생성할 때 주는 자료형
    • new SimpleGeneric<Int32>(10);
제네릭 인터페이스
  • 형 매개변수를 가지는 인터페이스
    • 형 매개변수의 선언 외에 일반 인터페이스를 구현하는 과정과 동일
제네릭 메소드
  • 형 매개변수를 갖는 메소드
  • 형 매개변수의 중첩
    • 제네릭 메소드의 형 매개변수의 이름과 제네릭 클래스의 형 매개변수 이름이 같은 경우
    • 서로 독립된 형 매개변수의 개념을 가짐
      • 제네릭 클래스는 객체 생성 시에 형 매개변수를 전달받음
      • 제네릭 메소드는 호출 시에 유추하여 형 매개변수가 결정됨
형 매개변수
  • 형 매개변수의 범위

    • 프러그램의 유연성 <=> 신뢰성
  • 프로그램의 신뢰성을 증진하기 위해 제네릭에 전달 가능한 자료형의 범위를 제한할 필요가 있음

  • 제네릭 클래스를 작성시 한정

    • where 키워드 사용

      • where T : struct // T는 값형이어야 함

        where T : class // T는 참조형이어야 함

        where T : new() // T는 매개변수가 없는 생성자가 있어야 함

        where T : MyClass // T는 MyClass의 파생 클래스이어야 함

        where T : IMyInterface // T는 IMyInterface를 구현한 클래스이어야 함

        where T : U // T는 U로부터 파생된 클래스이어야 함