[C언어] 사용자 데이터형은 어떻게 추상화 시킬 수 있을까요?

gurumong의 이미지

알고리즘 교재를 보면 그래프, 스택, 큐 등등의 수 많은 자료형들이 등장하는데요
이러한 자료형을 추상화 시키는데 있어서
좋다고 알려진 어떠한 설계원칙이나 구조가 있을까요?

가령 그래프라는 자료형이 있을때
C언어에서 그래프를 트리 또는 배열 등으로 그래프를 표현 가능하잖아요

이 그래프를 배열로 표현하기로 했다면
이후 작성되는 모든 코드들은 배열참조로 그래프의 자료에 접근하게 될텐데

한참이 지난 후 몇가지 이유로 그래프의 표현을 배열에서 트리로 바꾸기로 결정한다면
해당 그래프를 다루는 많은 함수들의 코드의 변경이 필요하게 되잖아요
단지 자료형의 표현을 바꾸었다고 수 많은 코드들을 추적해서 수정한다는게 정말 작은 일이 아니고
어쩌면 이러한 자료형의 변경이 빈번하게 발생 할 수도 있을꺼 같기도 했구요

그 때문에 자료형을 추상적으로 정의하고 사용하는 방법에 대해서 고민을 해봐야겠더라구요
알고리즘 책에서는 알고리즘 자체에만 집중하고 있어서 그러한 내용을 익힐수 없어서 질문을 하게 되었습니다
이에 대해 나와있는 책이나 문서나 웹서칭 해볼만한 키워드 등등 부탁드립니다 (_ _)

세벌의 이미지

자료구조 C
자료구조 C++
등으로 검색해 보시면 어떨까요?
큰 서점에 가서 둘러보시는 것도 좋겠네요.

익명 사용자의 이미지

API를 디자인하실 때 특정 구현물에 의존적으로 하면 그런일이 발생합니다.
예로들으신 자료구조의 경우, 다음의 접근방식 자체가 문제입니다.

"배열참조로 그래프의 자료에 접근하게 될텐데"

그래프라는 자료구조는 배열과 전혀 상관이 없습니다.
단지, 방향을 찾거나 노드를 이동하는것만 표현하면 되겠죠.

내부에서 배열을 이용하여 그래프의 노드들을 저장하던지, 트리를
사용해서 저장하던지 API는 차이가 없어야합니다

참고로 트리 또한 배열로 구현할수도 있고 링크드리스트로 구현할수도 있습니다. 배열과 트리를 비교한다는것 자체가 말이 안되는것 입니다.

>> 이러한 자료형을 추상화 시키는데 있어서 좋다고 알려진 어떠한 설계원칙이나 구조가 있을까요?

답을 드리자면, 자료형뿐만이 아니라 어떤 객체,모듈,라이브러리,서비스의 인터페이스를 디자인할때, 최대한 구현방식에 의존적이지않은 인터페이스를 설계하는것이 기본입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.