프로그래밍 공부
작성일
2023. 5. 5. 08:27
작성자
WDmil
728x90

일반적인 프로그래밍은 형식지정자를 사용하여 int나 flaot같은 형식을 지정해준다는 기준 하에 프로그래밍 하게된다.

 

그러나, 이러한 방식은 코드의 재사용성을 낮추고 객체지향적인 프로그래밍을 만드는데 방해물이 될 수 있다.

그래서 제네릭 프로그래밍 이라는 프로그래밍 패러다임이 등장하였다. 이는 알고리즘과 데이터구조를 타입에 독립적인 방식으로 작성하여, 재사용성을 높이고 코드의 중복을 줄이는 효과가 있다.

 

예를들어, C++의 STRL에서 vector나 list같은 배열컨테이너는 제네릭 프로그래밍의 대표적인 예시이다. 이러한 컨테이너는 타입에 관계없이 ( vector이나 list같은 타입을 형식에 관계하지 않고 생성시 선언으로 타입을 정해줄 수 있다 ) 정수나 문자열같은 다양한 타입의 데이터를 저장해줄 수 있다.

 

또한, sort나 find같은알고리즘 함수들도 제네릭으로 작성되어있어, 서로 다른 타입의 컨테이너 에서도 동작하게 된다.

 

이러한 제네릭 프로그래밍을 함으로써 얻게되는 장점은 다음과 같다.

 

  • 코드의 재사용성이 증가한다.
    • 만든 함수나 Class에 다른 타입의 변수를 넣어도 스스로 지정하여 형식을 바꾸기 때문에 재활용하기 좋다.
  • 코드의 유연성이 증가한다.
    • 만든 함수나 Class등 코드의 내부에 다른 형식의 변수나, 아예 새로 만든 class를 선언하더라도 스스로 타입을 찾아서 기입하기 때문에 별도의 수정이 필요하지 않다.
  • 컴파일 시 오류발견에 유리하다
    • 형식지정자가 정의되어있지 않은 지정자 이면, 컴파일 시 오류가 나타나기 때문에 더 쉬운 오류발견이 가능해진다.

그러나, 이러한 편리성이 증가한 만큼 단점 또한 뚜렷하다.

 

  • 설계에 따라 코드 복잡도가 높아질 수 있다.
    • 제네릭 코드는 타입에 독립적으로 작성되어 있기 때문에 무의미한 코드의 반복이 이루어질 수 있으며 이로인해 꼭 필요하지 않은 분리가 발생하여 코드가 난잡해보일 수 있다.
  • 코드의 가독성이 떨어질 수 있다.
    • 위와 같은 사항에 따라 코드가 복잡해지면 자연스럽게 코드의 가독성이 떨어지게 된다.
  • 컴파일 시간이 더 많이 걸릴수 있다.
    • 분리되어있는 코드란, 컴파일 시 가져와야할 head의 숫자가 증가한다는 의미와도 같아지기 때문에, 이로인해 컴파일시간이 늘어나기도 한다.

이러한 제네릭 프로그래밍 패러다임을 활용한 간단한 vector 구현의 코드예시이다.

위 코드처럼, vector자체는 형식지정자가 따로 정해져있지 않기 때문에, 원하는 형식을 기입하여 배열을 구축할 수 있다.

이러한 vector의 탬플릿은 다음과 같다.

위와 같이, 어떠한 형식이 지정되어있는것 이 아닌, T라는 임의의 형식지정자를 사용하여, 원하는 값을 입력하면 T가 해당되는 형식으로 변환되기 때문에 이러한 가변적인 코드가 구현이 가능하다.

 

 

728x90

'컴퓨터 용어 정리' 카테고리의 다른 글

STL_AssociativeContainer  (0) 2023.05.28
STL_SequnceContainer  (0) 2023.05.28
C++ 람다식 함수 ( Lambda Function )  (0) 2023.05.05
C++ algorithm 라이브러리  (0) 2023.05.05
디자인 패턴(Design Pattern)  (0) 2023.04.28