CS

[프로그래밍 언어론] 복합타입

Grace 2023. 12. 1. 10:47

배열

  • 동질형 데이터의 모음으로 구성된 타입
    • 원소: 각 데이터
    • 배열의 크기: 배열이 갖는 원소의 개수
  • 각 원소는 첨자(첫 원소와의 상대적 위치)로 구별
  • 연산 집합: 배열 전체를 다루는 연산

데이터 집합

  • 원소의 타입에 해당하는 데이터 집합이 배열의 크기만큼 모인 집합
  • 원소의 타입과 배열의 크기에 따라 다양한 타입 존재
    • 원소의 타입: 단순타입, 복합타입 모두 가능
    • 배열의 크기: 양의 정수 범위 * 차원
  • 차원: 배열에 사용되는 첨자의 개수 → 1차원, 2차원, 3차원, … 배열

배열의 구현

  • 저장공간 확보
    • 정적 변수
    • 스택 동적 변수: 배열의 크기는 정적/동적
    • 힙 동적 변수
  • 첨자를 통한 원소의 주소 계산
  • 크기 N인 1차원 배열 A: 주소(A[i]) = 주소(A[0]) + i * 원소크기
  • 크기 M*N인 2차원 배열 B
    • 행 우선 저장(대부분의 언어): 주소(B[i][j]) = 주소(B[0][0]) + i * N * 원소크기 + j * 원소크기
    • 열 우선 저장: 주소(B[i][j]) = 주소(B[0][0]) + j * M * 원소크기 + i * 원소크기

문자열형

  • 문자열 데이터를 다루는 타입
  • 데이터 집합: 모든 문자열이 모인 집합
  • 연산 집합: 대입 연산, 연결 연산

연관배열(associative array)과 해싱

  • 동질형 데이터의 순서 없는 모음으로 구성된 타입 (원소 간의 위치는 의미 없음)
  • 각 원소는 키(각 원소의 절대 위치)로 구별 → 키는 중복 불가, 원소는 중복 가능
  • 데이터 집합
    • 키의 타입에 해당하는 데이터 집합과 원소 타입에 해당하는 데이터 집합 쌍이 모인 집합
    • 키의 타입과 원소의 타입에 따라 다양한 타입 존재

구조체와 공용체

구조체

  • 데이터의 모음으로 구성된 타입 → 원소: 동질형/이질형 모두 가능
  • 각 원소는 이름(원소의 타입으로 선언된 변수명)으로 구별
  • 데이터 집합
    • 각 원소의 타입에 해당하는 데이터 집합들이 모인 집합
    • 원소의 개수와 각 원소의 타입(단순타입, 복합타입 모두 가능)에 따라 다양한 타입 존재
  • 연산 집합: 초기화, 대입 연산

공용체

  • 저장 공간을 공유하는 데이터의 모음으로 구성된 타입
  • 원소들의 구성 형태는 구조체와 유사 → 각 원소는 이름으로 구별
  • 한 원소의 값이 바뀌면 다른 원소들이 영향을 받음
  • 데이터 집합
    • 각 원소의 타입에 해당하는 데이터 집합들의 합집합
    • 각 원소의 타입(단순타입, 복합타입 모두 가능)에 따라 다양한 타입 존재
  • 연산 집합: 개별 원소 타입의 연산

포인터형과 참조형

포인터형

  • 특정 데이터가 저장되는 주소 자체를 데이터로 다루는 타입이며, 특정 데이터의 타입은 사용자가 지정함
  • 데이터 집합
    • 가용한 범위의 주소를 포함
    • 2^32 이내(32비트 시스템) 혹은 2^64 이내(64비트 시스템)
  • 연산 집합: 대입 연산, 덧셈, 뺄셈

참조형

사용자가 지정하는 타입의 데이터가 저장된 주소 자체를 자신의 주소로 사용하는 타입