-
20250331_(3) Generalized ProgrammingStudy/C# 2025. 3. 31. 15:53
일반화 프로그래밍은 자료형(type)에 독립적인 알고리즘이나 자료구조를 작성하는 프로그래밍 방식이다.
즉, 특정 자료형에만 동작하는 코드가 아니라, 다양한 타입에서도 재사용 가능한 범용 코드를 작성하는 것을 목표로 한다.
예를 들어, 리스트를 정렬하는 함수를 만들 때,
int 리스트, string 리스트, float 리스트 등 자료형마다 따로 함수를 만드는 게 아니라,
하나의 일반화된 함수로 모든 타입을 처리할 수 있게 만드는 방식이다.
1. 제네릭(Generic)
일반화 프로그래밍은 언어 차원에서는 보통 제네릭(Generic) 으로 구현된다.
C#에서는 List<T>, Dictionary<TKey, TValue>, IEnumerable<T> 등이 모두 일반화 프로그래밍의 대표적인 예다.
public class Box<T> { public T Value { get; set; } }
이렇게 하면 Box<int>, Box<string>, Box<DateTime> 등 다양한 타입에 대해 하나의 클래스 구조를 재사용할 수 있다.
2. 일반화 프로그래밍의 장점
코드 재사용성 증가 여러 타입에서 동일한 코드 구조를 사용할 수 있음 형식 안정성 타입이 컴파일 타임에 정해지므로, 잘못된 타입 사용을 방지함 성능 향상 object 기반 처리 방식보다 박싱/언박싱 없이 효율적임 중복 코드 감소 같은 로직을 여러 타입에 맞게 반복 작성할 필요 없음
3. 언어별 일반화 프로그래밍 구현 방식
C# Generics (T, TKey, TValue, etc.) Java Generics (타입 소거 방식) C++ template (컴파일 타임 코드 생성) Rust Generics + Traits TypeScript Generics (<T>)
4. 일반화 프로그래밍 vs 다형성(OOP) 차이
처리 시점 컴파일 타임 런타임 (가상 메서드 호출 등) 주 목적 코드 재사용성과 형식 안전성 동적 행위 변경 예시 List<T>, Swap<T>() virtual, override, 인터페이스 구현
5. 제약 조건을 통한 타입 제한
일반화 프로그래밍에서도 경우에 따라 타입에 제약을 줄 수 있음
C#에서는 where 키워드를 통해 제네릭 타입에 조건을 부여할 수 있다.
public class Repository<T> where T : IEntity, new() { public T CreateInstance() { return new T(); } }
→ T는 반드시 IEntity를 상속하고, 기본 생성자가 있어야만 한다.
- 일반화 프로그래밍은 다양한 자료형에서 재사용 가능한 범용 알고리즘과 구조를 작성하는 프로그래밍 방식이다.
- C#에서는 이를 제네릭(Generic) 기능으로 지원하며, 주요 라이브러리와 프레임워크에서도 광범위하게 활용된다.
- 일반화 프로그래밍은 코드 중복 제거, 형식 안전성 확보, 성능 최적화 측면에서 유용하며, 객체지향 다형성과는 다른 관점의 재사용 구조를 제공한다.
'Study > C#' 카테고리의 다른 글
20250331_(5) LINQ (Language Integrated Query) (0) 2025.03.31 20250331_(4) Generics (0) 2025.03.31 20250331_(2) Abstract Programming (0) 2025.03.31 20250331_(1) Object-Oriented Programming, OOP (0) 2025.03.31 20250327_(7) Collection (0) 2025.03.28