Presentation is loading. Please wait.

Presentation is loading. Please wait.

6장 데이터 타입(3) 2016. 5. 11 순천향대학교 컴퓨터공학부 하 상 호.

Similar presentations


Presentation on theme: "6장 데이터 타입(3) 2016. 5. 11 순천향대학교 컴퓨터공학부 하 상 호."— Presentation transcript:

1 6장 데이터 타입(3) 순천향대학교 컴퓨터공학부 하 상 호

2 목차 서론 기본 데이터 타입 문자 스트링 타입 사용자-정의 순서 타입 배열 타입 연상 배열 레코드 타입 튜플 타입 리스트 타입
공용체 타입 포인터와 참조 타입 타입 검사 강타입 타입 동등

3 튜플 타입 튜플(tuple)은 레코드와 유사하나 원소들이 명명되지 않는 데이터 타입 In Python
myTuple = (3, 5.8, ‘apple’) # 요소들은 동일 타입일 필요가 없다 myTuple[1] # 튜플의 첫번째 원소 참조 myTuple[1] = 5 # Error: 튜플은 변경 불가(immutable) myTuple =+ yourTuple # +는 접합 연산자로 새로운 튜플 생성 del # 삭제 용도: 배열이 매개변수로 전달되나 변경되지 않아야 하는 경우 함수가 여러 개의 값을 반환할 때

4 리스트 타입 LISP에서 처음으로 도입, 최근에 일부 명령형 언어에 도입 In LISP, Scheme
리스트는 괄호로 구분되고, 원소들은 콤마로 구분되지 않는다. (A B C D) (A (B C) D) 데이터와 코드는 동일한 형식을 갖는다 (A B C)가 코드로 해석될 때, 함수 A가 매개변수 B C에 적용된다 해석기는 리스트가 무엇인지를 알 필요가 있고, 리스트가 데이터일 경우에 어포스트로피로 표시한다. ‘(A B C)는 데이터이다.

5 리스트 연산 리스트 분리 함수 리스트 생성 함수 (CAR ‘(A B C)) // 리스트의 첫번째 원소 반환
(CDR ‘(A B C)) // 리스트의 첫번째 원소를 제외하고 반환 리스트 생성 함수 (cons ‘A ‘(B C)) // 첫번째 매개변수를 두번째 매개변수 리스트에 // 포함시켜서 새로운 리스트 생성 (list ‘A ‘B ‘(C D)) // 매개변수들을 원소로 포함하는 리스트 생성/반환

6 리스트 예: Python Python은 리스트 타입 제공 Python의 배열로서도 역할 원소들은 임의 타입 가능
리스트는 변경 가능(mutuable) 튜플처럼 사용 가능: 인덱싱, 접합, 슬라이싱(부분 참조), in 등 myList = [3, 5.8, “grape”] x = myList[1] //x에 5.8을 할당: 리스트 원소들은 0부터 인덱싱 del myList[1] // 두번째 원소 삭제 리스트 함축(list comprehension) 지원: 집합 표기법에 기반 [x*x for x in range (12) if x % 3 == 0] // range 함수는 [0, 1, 2, …, 11, 12]의 배열 생성 // 조건이 배열 각 원소에 적용되어 그 결과들로 구성된 새로운 배열 구성

7 공용체 타입 공용체(union)는 그 변수가 프로그램 실행 중에 다른 시기에 다른 타입의 값이 저장할 수 있는 타입
설계 고려사항 타입 검사가 요구되는가? => 그러한 타입 검사는 동적 공용체가 레코드에 포함되어야 하는가?

8 공용체 유형 자유 공용체(free union) 판별 공용체(discriminated union) 타입 검사를 지원하지 않음
언어 예: Fortran, C, C++ 판별 공용체(discriminated union) 타입 검사 지원 판별자(discriminant) 또는 태그(tag)라는 타입 지시자를 포함 언어 예: Ada

9 예제: 자유 공용체 In C union flexType { int intEl; float floatEl; };
union flexType e; float x; e.intEl = 27; x = e.floatEl; // 타입 검사가 이루어지는가?

10 예제: 판별 공용체 Ada에서 가변 레코드(variant record)로 명세 판별자
type Shape is (Circle, Triangle, Rectangle); type Colors is (Red, Green, Blue); type Figure (Form: Shape) is record Filled: Boolean; Color: Colors; case Form is when Circle => Diameter: Float; when Triangle => Leftside, Rightside: Integer; Angle: Float; when Rectangle => Side1, Side2: Integer; end case; end record; 가변 부분

11 예제: 판별 공용체 type Shape is (Circle, Triangle, Rectangle); type Colors is (Red, Green, Blue); type Figure (Form: Shape) is record Filled: Boolean; Color: Colors; case Form is when Circle => Diameter: Float; when Triangle => Leftside, Rightside: Integer; Angle: Float; when Rectangle => Side1, Side2: Integer; end case; end record; 판별 공용체 사용 Figure: figure1; // 무제한 가변 레코드(unconstrained variant record) Figure: figure2(form=>triangle); // 제한 가변 변수(constrained // variant variable) 선언, // 다른 가변 타입으로 변경 불가 // 정적 타입 검사 가능 figure1 := (filled=> True, color=>Blue, Form=>rectangle, side1=>12, side2=>3); // 태그 포함 모든 필드 배정 요구 if (figlure1.diameter > 3.0)… // 실행시간중 동적 타입 검사 // Form 태그가 Circle인지를 판단

12 공용체 평가 공용체가 안전한가? 자유 공용체 vs. 판별 공용체 언어 예 C, C++, Ada Java, C#

13 공용체 타입 구현 가장 큰 가변 요소를 위한 충분한 기억공간 할당

14 판별 공용체 타입 구현 판별 공용체 태그는 가변 요소와 함께 저장되며, 각 가변요소에 대해서 서술자 저장
type Node (Tag : Boolean) is record case Tag is when True => Count : Integer; when False => Sum : Float; end case; end record; 가변 요소별로 한 개의 항목 포함


Download ppt "6장 데이터 타입(3) 2016. 5. 11 순천향대학교 컴퓨터공학부 하 상 호."

Similar presentations


Ads by Google