Generic

참새·2023년 3월 29일
0

Generic

  • 클래스나 인터페이스에서 사용할 타입을 타입 파라미터(type parameter)로 지정하여, 재사용성과 타입 안정성을 높이는 방법.

장점

  • 타입 안정성(Type Safety) 보장

    컴파일 시점에 타입 안정성 보장이 가능. 타입 파라미터를 사용하여 다양한 타입을 처리할 수 있으며, 컴파일러는 이를 검사하여 불일치하는 타입이 사용되는 경우 컴파일 오류를 발생시켜 런타임 시에 발생할 수 있는 오류를 사전에 방지 가능.

  • 코드의 재사용성(Reusability) 향상

    타입 파라미터를 사용하여 코드를 작성하면, 각각의 타입에 대해 별도로 작성할 필요 없이, 하나의 코드로 다양한 타입을 처리 가능.

  • 가독성(Readability) 향상

    타입이 명시되어 코드를 읽는 사람이 해당 코드를 어떤 타입으로 사용하는지 쉽게 파악 가능.

  • 예외 처리(Exception Handling) 감소

    컴파일 시점에 타입 안정성을 보장하므로, 런타임에 예기치 않은 오류가 발생할 가능성이 감소.

  • 유지 보수성(Maintainability) 향상

    코드의 재사용성이 높아지고 타입을 변경할 때 해당 타입을 사용하는 모든 코드를 일일이 수정할 필요 없이, 하나의 코드만 수정하면 되므로 유지 보수 비용 감소.

단점

  • 코드가 복잡해질 수 있음

    제네릭 코드는 일반적으로 타입을 명시하는 코드와 타입 추론을 사용하는 코드로 구성되어 있어 제네릭 코드를 작성할 때는 코드의 가독성과 유지보수성을 고려해야 합니다.

  • 제네릭 타입 제약이 제한적일 수 있음

    자바에서는 제네릭 타입을 사용할 때, 상속 계층 구조나 인터페이스를 활용하여 타입 제약을 둘 수 있으나 이 경우에도, 모든 타입 제약이 표현 가능하지 않음. 제네릭 타입에 대한 제약을 둘 때는 제약 조건을 표현하기 어려운 경우가 있음.

  • 불필요한 메모리 사용이 발생할 수 있음

    제네릭 코드를 작성할 때, 컴파일러는 내부에서 자동으로 형변환 코드를 생성하는데 이 과정에서 불필요한 메모리 할당이 발생할 수 있음. 이러한 경우를 방지하기 위해서는, 가능한 한 타입 안정성을 보장하면서도, 불필요한 형변환을 최소화하는 코드를 작성해야 함.

컬랙션 클래스에서 제네릭을 사용하는 이유

  • 타입 안정성(Type Safety) 보장

    제네릭을 사용하지 않을 경우 Object 타입으로 요소를 처리해야 하기 때문에, 런타임 시에 타입 불일치 오류가 발생할 수 있지만 제네릭을 사용할 경우 컴파일 시점에서 타입 불일치 오류를 검출할 수 있음.

  • 코드의 가독성(Readability) 향상

    제네릭을 사용하지 않을 경우 타입 변환 코드를 직접 작성해야 하기 때문에, 코드가 복잡해질 수 있으나 제네릭을 사용하면, 코드가 더 간결하고 명확함.

  • 코드의 재사용성(Reusability) 향상

    제네릭 코드는 다양한 타입에 대해서 동일한 동작을 수행할 수 있기 때문에, 다른 프로젝트에서도 재사용이 가능.

  • 성능 향상을 기대할 수 있음

    제네릭을 사용하지 않을 경우 컬렉션 클래스에 요소를 추가할 때마다 타입 변환을 수행해야 하지만 제네릭을 사용할 경우 컴파일 시점에 타입 변환 코드를 자동으로 생성하기 때문에, 불필요한 성능 저하를 방지할 수 있음.

profile
응애 나 아기 개발자

0개의 댓글