제네릭

    [Java] Generic 제네릭

    사용법다이아몬드 연산자 ()에 타입을 정의해주면 되지만 명명 규칙이 존재한다.E : 요소(element)K : 키(key)N : 숫자(Number)T : 타입(type)V : 값(value)S, U, V : 2,3,4번째 선언된 타입장점컴파일 타임때 타입추론을 통한 타입에러를 사전에 잡을 수 있다.컴파일러가 타입추론을 통한 타입 캐스팅을 자동으로 해준다.코드의 재사용성이 매우 높아진다.컴파일 타임 때 타입 추론을 통한 타입 에러를 사전에 잡을 수 있다public interface List extends Collection {...} List를 사용할 때 우리는 다이아몬드 연산자 () 안에 어떠한 타입을 지정하고 사용한다. Java 7 버전 이후로 도입됐다.List string = new ArrayList..

    [C#] 배열의 타입을 변경하는 방법 (제네릭 가능)

    1. Array 클래스의 ConvertAll 메서드 public static TOutput[] ConvertAll ( TInput[] array, Converter converter); TInput[] array - 특정 타입으로 변환하고 싶은 배열을 전달한다. Convert converter - 배열의 요소를 특정 타입으로 변환하는 변환기를 전달한다. - TInput: 기존 배열의 타입을 설정한다. - TOutput: 변환하고 싶은 타입을 설정한다. ConvertAll() 메서드는 특정 타입으로 변환된 새로운 배열을 반환한다. 다음 예제는 string 타입의 배열을 int 타입의 배열로 변환된 새로운 배열을 반환한다 class Program { public static int stringToInt(st..

    [C#] 제네릭 메서드(Generic Method) 널(Null) 반환 방법

    매개변수가 null이 아니면, 매개변수의 값을 반환하고 매개변수의 값이 null이면, null을 반환하는 코드다. T ReturnValue(T val) { if (val != null) { return val; } else { return null; } } 하지만, return null; 코드에서 에러가 발생한다 C#에서 null이 올 수 있는 데이터 타입이 있고 불가능한 데이터 타입이 존재한다. 기본적으로 숫자형 타입들은 Nullable 연산자를 사용하지 않으면, null값을 할당할 수 없다. 즉, 제네릭 타입은 null이 가능한 타입도 있고 불가능한 타입이 있으므로 null을 반환할 수 없다. 만약, 제네릭 메서드에서 null을 반환하고 싶은 경우 default(T)를 사용한다. T ReturnVal..

    C# 제네릭 형식 제약 조건 (where)

    제네릭 제약 조건 추가 class GenericClass { public T objMember { get; set; } } class Program { static void Main(string[] args) { GenericClass genericObj1 = new GenericClass(); GenericClass genericObj2 = new GenericClass(); GenericClass genericObj3 = new GenericClass(); } } 제네릭은 모든 타입을 허용하는 기법이므로 GenericClass 클래스의 objMember 멤버 변수는 값 형식인 int형이 될 수도 있고 참조 형식인 string형과 ArrayList 타입도 가능하다. "GenericClass 클래스의 o..

    C# 제네릭 (C++ > 템플릿)

    using System; public class Test where T : class { public T Get_val(T _val) { return _val; } } public class Another { public static void Main() { Test int_test = new Test(); Console.WriteLine(int_test.Get_val(10)); } } 첫째 클래스 선언 라인에 보면 where T : class라고 명시 되어있다, Main 함수 내에 선언하고 있는건 int형이다, 따라서 아래와 같이 에러가 뜬다. C++와 가장 큰 차이점은 C#의 템플릿은 제약 사항이 많다는 것이다, SFINAE도 있겠지만 가장 큰 특징은 추상화를 할 수 없다는 점이다 따라서 아래는 에러..