티스토리 뷰
오늘은 제너릭에 대해서 정리해 볼 까 합니다.
사실은 개략적으로는 알고있었지만, 안쓴 지가 꽤 되다 보니 가물가물해서...
이번 프로젝트에 쓰이기도 했고 해서 정리를 해 보려고 합니다.
제너릭에 대하여
제너릭이란 코드를 입력할 때 타입을 정하는 것이 아닌, 컴파일을 할 때 타입을 정하는 방식을 말하는 것으로, 타입 선언을 가변화 하기 위해 사용하는 기능이다.
이러한 구성을 통해서 코드에 유연성을 더해줄 수 있고, 이 유연성을 통해서 재사용 능력도 높아지게 되는 기능이라고 보면 좋다.
특히 인터페이스 같은 상속 요소의 역량을 높여줄 수 있는 기능이기도 하기 때문에 익혀둔다면 유용하게 쓰일 것이다.
제너릭 사용법
public class Class: Interface<ValueType>
{
public ValueType Function(val param) {}
}
public interface Interface<T>
{
puublic T Function(val param);
}
인터페이스를 예시로 들어서 사용법을 작성해 보았다.
구체적인 사용법은 아래와 같다.
- 함수나 클래스, 인터페이스 등을 선언할 때 <T>를 추가하여 제너릭을 사용한다고 명시한다.
- 이 때, 선언 이후 where T : condition 을 통해서 제약 조건을 추가할 수 있다.
[ condition이 제약 조건에 해당하는 부분이다. 여기에 조건을 추가하면 된다.]- 클래스, 인터페이스: 해당 클래스나 인터페이스를 상속받은 클래스여야 한다.
- new(): 매개변수가 없는 기본 생성자가 있어야 한다.
- struce | enum | delegate: T가 구조체 | 열거형 | 델리게이트 여야 한다.
- unmanged: 비관리 형식이어야 한다.
[ (s)byte, (u)short, (u)int, (u)long, char, float, double, decimal, bool, 열거형, 포인터가 이에 해당한다.] - notnull: null값이 아니어야 한다.
- 이 때, 선언 이후 where T : condition 을 통해서 제약 조건을 추가할 수 있다.
- T를 변수형으로 사용하는 코드를 작성한다.
- 외부에서 해당 코드를 사용할 때, T 대신 원하는 자료형을 사용한다.
- 이 때, 같은 제너릭으로 사용하는 변수는 모두 같은 변수형이어야 한다.
- <T> 대신 <T1, T2> 같은 방식으로 제너릭을 복수로 구성할 수도 있다.
마무리하며
제너릭은 변수형을 나중에 정한다는 특성 덕분에 구현할 수 있는 폭을 대폭 늘려줄 수 있는 기능이다.
특히 복수 클래스의 공통 요소를 정의하기 위한 기능인 인터페이스와 함께 사용하면 범용적으로 쓸 수 있는 특성을 구성할 수 있는 등, 코드 재사용성을 차원이 다른 수준으로 높일 수 있게 된다.
다만, 남용하지는 말자. 용도가 불명확한 코드는 스파게티 코드가 될 수 있다.
'스파르타 내일배움캠프 > Today I Learned' 카테고리의 다른 글
Today I Learned - Day 14 [사전(Dictionary) 구조에 대하여] (3) | 2024.10.01 |
---|---|
Today I Learned - Day 13 [콘솔창 UI 작업에 관하여 - 2] (1) | 2024.09.30 |
Today I Learned - Day 11 [델리게이트] (0) | 2024.09.26 |
Today I Learned - Day 10 [Json파일 입출력] (0) | 2024.09.25 |
Today I Learned - Day 9 [콘솔창 UI 작업에 관하여] (1) | 2024.09.24 |