3. 추상 자료형

2022. 4. 19. 21:01·학교/자료구조와 알고리즘

이번 내용은 추상 자료형이다.

자료형이란 용어 그대로 "데이터의 종류"이다. 정수, 실수, 문자열 등이 기초적인 자료형의 예.

이러한 자료형은 프로그래밍 언어가 기본적으로 제공하고 이외에도 많은 자료형이 존재함.

 

C언어에는 정수, 실수, 문자를 나타내는 기초적인 자료형과 다른 자료형을 묶을 수 있는 배열이나 구조체도 있음.

 

  • 배열 : 동일한 자료형이 여러 개 모인 것
  • 구조체 : 다른 자료형이 여러 개 모인 것

데이터의 종류가 결정됨에 따라 그 데이터와 관련된 연산도 달라짐.

Ex. 나머지를 계산하는 연산자는 정수 데이터에서는 의미가 있지만 실수 데이터에서는 의미가 X

 

자료형이라고 하면 데이터뿐만 아니라 데이터 간에 가능한 연산도 고려하여야 함.

복잡한 자료형을 구현할 떄는 연산이 연산자가 아니고 함수로 작성됨.

예로, 스택에서 새로운 값을 추가하는 연산은 add( ) 함수로 정의.

 

이제 메인 내용인 추상자료형에 대해 얘기해보자면,

추상 자료형(ADT: abstract data type)이란 추상적, 수학적으로 자료형을 정의한 것.

데이터나 연산이 무엇(what)인가는 정의되지만 데이터나 연산을 어떻게(how) 컴퓨터 상에서 구현할 것인지는 정의되지 않음.

 

소프트웨어 개발과 유지보수에 있어서 가장 중요한 이슈는 "어떻게 소프트웨어 시스템의 복잡성을 관리할 것인가"이다.

이러한 복잡성에 대처하기 위한 새로운 아이디어들이 등장했고 이 아이디어를 구현한 프로그래밍 방법론과 언어들이 개발되었다. 이러한 방법론이나 언어들의 유력한 주체는 추상화와 관련된 도구들의 개발이었다.

 

추상화-> 정보은닉 기법 -> 추상 자료형

추상화란 사용자에게 중요한 정보는 강조되고 반면 중요하지 않은 구현 세부 사항은 제거하는 것

이 내용만으론 와닿지가 않아서 직접 찾아보았다.

 

소프트웨어 개발 관점에서 추상화란 인터페이스에 의존하고, 구체적인 구현에는 의존하지 않는다.

보통 함수를 기본적인 추상화 방법으로 사용한다.

대표적으로 printf() 가 있다. 

실제 출력에 대해 어떻게 동작하는지 알지 못하지만 무엇을 하는지 알고 사용한다.

 

함수를 작게 만드는 것이 핵심이며, 함수가 하는 일도 하나여야 한다.

 

그 하나의 역할이 함수의 이름으로 표현되며, 이름만 가지고 무슨 역할을 하는지 명확히 파악되어야 한다.

 

함수가 커진다 -> 추상화를 제대로 하지 않은 것이다.

 

함수 내 블록화 된 코드를 묶어서 새로운 함수로 만든다. -> 그 블록에 대한 지식을 대표적으로 표현하기 위한 추상화

 

반복문 전체를 묶어서 하나의 함수로 만들어도 반복문이 무엇을 하는지 쉽게 이해하기 위한 추상화 작업이다.

 

파일의 이름이나 디렉토리의 이름도 추상화의 일부이다.

 

내부를 보지 않더라도 이름만으로 어떤 역할을 하는지 파악할 수 있어야 한다.

출처👇

추상화란 무엇일까? (tistory.com)

 

추상화란 무엇일까?

본 포스팅은 개인정리 목적으로 작성된 글입니다. 잘못된 정보가 있을 수 있으며, 피드백은 겸허히 받겠습니다. 추상화란 무엇일까? 위키에 추상화에 대한 정의가 이렇게 내려져 있다. 공통의

choi3950.tistory.com

 

위 글에서 알 수 있듯이 추상화란 사용자가 이름만 보고 어떤 기능을 하는지 알게 하고, 불필요한 정보는 보지 않게 하는 일련의 과정이라고도 할 수 있을 것 같다.

 

🧐​추상 데이터 타입의 정의

객체 : 추상 데이터 타입에 속하는 객체가 정의됨.

연산 : 이들 객체들 사이의 연산이 정의됨. 이 연산은 추상 데이터 타입과 외부를 연결하는 인터페이스의 역할을 함.

 

추상 데이터 타입과 TV

TV의 인터페이스가 제공하는 특정한 작업만을 할 수 있다. 사용자들은 ADT가 제공하는 연산만을 사용할 수 있다.
사용자는 TV의 내부를 볼 수 없다. 사용자들은 ADT 내부의 데이터를 접근할 수 없다.
TV의 내부에서 무엇이 일어나고 있는지를 몰라도 이용할 수 있다. 사용자들은 ADT가 어떻게 구현되는지 모르더라도 ADT를 사용할 수 있다.

 

프로그래밍 언어에 따라 ADT는 여러 가지 방법으로 구현됨. 객체지향언어에서는 "클래스"개념을 사용하여 ADT가 구현.

ADT의 객체는 클래스의 속성으로 구현되고 ADT의 연산은 클래스의 멤버함수로 구현.

객체지향언어에서는 private나 protected 키워드를 이용하여 내부 자료의 접근을 제한할 수 있다.

또한 클래스는 계층구조(상속 개념 사용)로 구성될 수 있다.

'학교 > 자료구조와 알고리즘' 카테고리의 다른 글

6. 순환  (0) 2022.05.08
5. 빅오 표기법 & 최선, 평균, 최악  (0) 2022.04.19
4. 알고리즘  (0) 2022.04.19
2. 알고리즘  (0) 2022.04.17
1. 자료구조  (0) 2022.04.17
'학교/자료구조와 알고리즘' 카테고리의 다른 글
  • 5. 빅오 표기법 & 최선, 평균, 최악
  • 4. 알고리즘
  • 2. 알고리즘
  • 1. 자료구조
Developer03
Developer03
일학습병행제로 SI 기업에 앞으로 4년간 묶여버린 개발자입니다..
  • Developer03
    SI 개발자의 Job다한 이야기
    Developer03
  • 전체
    오늘
    어제
  • Github
    • 분류 전체보기 (38)
      • 일상 (3)
      • Back-End (1)
        • Spring (1)
        • JAVA (0)
        • DATABASE (0)
      • Front-End (1)
        • JSP (0)
        • JAVASCRIPT (1)
      • DEVOPS (2)
      • 강의 (0)
        • 스프링 입문 - 코드로 배우는 스프링 부트 (0)
      • 코테 (18)
      • 학교 (6)
        • 자료구조와 알고리즘 (6)
      • 프로젝트 (2)
      • 기타 (2)
      • 회사 (2)
        • 업무 (1)
        • 과제 (1)
      • 공기업 준비 (1)
        • 토익 (0)
        • NCS (0)
        • 전공필기 (0)
        • 면접 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
Developer03
3. 추상 자료형
상단으로

티스토리툴바