Download presentation
Presentation is loading. Please wait.
1
6장 데이터 타입 순천향대학교 컴퓨터공학과 하 상 호
2
프로그래밍 언어론(의견) 수업에서 인상깊고 유익했던 사항은 무엇입니까?
3
프로그래밍 언어론(의견) 수업 내용과 방법 개선을 위한 제안이 있다면 무엇입니까?
4
프로그래밍 언어론(의견) 평가 전공 핵심 과목으로 대체적으로 어려운 과목임
개념, 특징 등을 쉽게 설명하려고 예제 언어를 많이 활용함 전반적인 언어 특징, 개념, 구현 사항에 관한 이해에 중점을 둠 과제, 퀴즈의 즉각적인 피드백을 제공함 학생의 공부 의지 부족이 아쉬움 학생의 수준이 상이하고, 아주 미흡한 학생에 대한 배려가 어려움 중간고사 성적이 절대 미흡한 학생에 대한 배려 고려 과제 제시시 수준별 문제 고려
5
이 장에서는? 다양한 데이터 타입에 대해서 설계 고려사항, 언어 예제, 평가, 구현 사항 등을 살펴본다.
기본데이터 타입 문자 스트링 타입 사용자-정의 순서 타입 배열 타입 연상 배열 레코드 타입 튜플 타입 리스트 타입 공용체 타입 포인터 타입과 참조 타입 타입 검사, 강 타입, 타입 동등 규칙에 대해서 배운다.
6
서론 데이터 타입이란? 값들의 모임과 이러한 값들에 대한 미리 정의된 연산들의 집합으로 정의된다 프로그램의 데이터 조작 작업 용이성을 결정하는 중요한 요소는 언어의 데이터 타입들이 문제의 실세계의 객체들과 얼마나 잘 매칭되는가에 따른다. 십진수 타입, 불리안 타입 구조체 정의 사용자-정의 타입 추상 데이터 타입
7
서론 타입 시스템이란? 타입 시스템의 용도 구조화된 타입은 타입 연산자나 구성자로 정의
언어의 각 식에 대해서 타입이 어떻게 연관되는지를 정의하고, 타입 호환성, 타입 동등을 위한 규칙을 포함 => 프로그래밍 언어의 의미론 이해에 있어서 중요 타입 시스템의 용도 오류 탐지 <- 타입 검사 프로그램 모듈화 지원 <- 모듈간 인터페이스 검사 프로그램 문서화(documentation) <- 타입 선언 (데이터 정보의 문서화) 구조화된 타입은 타입 연산자나 구성자로 정의 C의 타입 연산자: [], * 타입 구성자: struct, record
8
서론 서술자(descriptor) 데이터 타입에 대한 공통된 설계 고려사항 서술자는 변수의 속성들의 모임
타입 검사, 할당/회수에 활용 속성 유형: 정적 vs. 동적 데이터 타입에 대한 공통된 설계 고려사항 타입에 대해서 어떠한 연산들이 정의되어 있고, 이러한 연산들이 어떻게 명세되는가?
9
기본 데이터 타입 대부분의 프로그래밍 언어는 기본 데이터 타입(primitive data types)들의 집합을 제공
기본 데이터 타입이란? 다른 데이터 타입의 관점에서 정의되지 않는 타입 단지 하드웨어의 반영이거나 약간의 비 하드웨어적 지원 기본 테이터 타입 종류 수치 타입: 정수, 부동 소수점, 십진수, 복소수 불리안 타입 문자 타입
10
기본 데이터 타입: 정수 하드웨어의 정확한 반영 다양한 크기의 정수 지원
Ex. Java의 부호 정수: byte, short, int, long
11
기본 데이터 타입: 부동 소수점 실수를 그 근사 값으로 모델링 방법: 소수점 이하 부분과 지수 부분으로 표현
ex. ∏, e 등 부동 소수점 수는 유한 개의 이진수로 표현 불가능(ex. 0.1) 방법: 소수점 이하 부분과 지수 부분으로 표현 2가지 실수 타입: float/ double IEEE 부동-소수점 표준 754 형식 단정도 배정도
12
기본 데이터 타입: 복소수 복소수는 그 값이 순서화된 부동 소수점 수의 쌍 (실수부, 허수부)로 표현:
리터럴 형식: (7 + 3i) in Python Ex. Fortran, Python, C99
13
기본 데이터 타입: 십진수 고정된 개수의 십진수 디지트를 BCD(binary coded decimal) 형식으로 저장
장점: 정확성(십진수 값을 정확하게 표현) 단점: 제한된 범위, 메모리 낭비 Ex. COBOL, C#
14
기본 데이터 타입: 불리안 값들의 범위는 단지 참, 거짓의 2가지 대부분 범용 언어에서 지원 흔히 바이트로 구현 판독성 향상
C99, C++, Java, C#, VB
15
기본 데이터 타입: 문자 문자 데이터는 수치 코딩으로 저장 코딩 기법:
ASCII (8bits): American Standard Code for Information Interchange) 16-bit Unicode 32-bit Unicode
16
문자 스트링 타입 문자 스트링 타입(character string type)은 값들이 일련의 문자들로 구성 설계 고려사항
기본 타입인가? 아니면 배열의 특정 유형인가? 스트링의 길이가 정적인가? 아니면 동적인가?
17
문자 스트링 타입 연산 전형적인 연산들 배정 비교(=, >, 등) 접합
부분 스트링 참조(substring reference) 패턴 매칭(pattern matching)
18
문자 스트링 타입: 언어 예 C C++ Java Python Perl, JavaScript, PHP
기본 타입이 아니고, char 배열로 제공 스트링 연산을 표준 라이브러리로 제공 C++ char 배열, string 클래스 Java String, StringBuffer 클래스 Python 스트링 기본 타입 지원 (Java의 String과 유사: 변경 불가) 다양한 스트링 연산 제공 Perl, JavaScript, PHP 스트링 기본 타입 지원 정규식을 이용한 패턴 매칭 연산 제공 (정규식 이용) (C++, Java, C# 지원) /[A-Za-z][A-Za-z\d]+/ /\d+\.?\d*|\.\d+/
19
스트링 길이 선택 사항 정적 길이 스트링( static length string)
스트링 생성시 그 길이가 설정되고 고정 Ex. Python 스트링, Java의 String, C++ string, C# String 제한된 동적 길이 스트링(limited dynamic length string) 스트링 선언시 고정된 최대 길이까지의 가변적인 길이를 갖는 것을 허용 C/C++ 동적 길이(dynamic length string) 최대 길이 제한 없이 가변 길이를 갖는 것을 허용 최대의 유연성, 동적 할당/회수 부담 Perl, JavaScript, C++
20
스트링 타입 평가 작성력 향상 단순 패턴 매칭이나 접합과 같은 연산은 필수적
배열보다는 기본 타입으로 다루는 것이 자연스럽다 단순 패턴 매칭이나 접합과 같은 연산은 필수적 오늘날 언어에서 기본 스트링 타입을 지원하지 않는 것은 정당화하기 어렵다
21
스트링 타입 구현 정적 길이 제한된 동적 길이 동적 길이 컴파일시간 서술자 현재 길이에 대한 실행시간 서술자 필요
C/C++에서 실행시간 서술자가 필요한가? 동적 길이 실행시간 서술자 필요 할당/회수에 따른 복잡한 기억공간 관리 필요
22
사용자-정의 순서 타입 순서 타입(ordinal type)은 가능한 값들의 범위가 양의 정수 집합과 연관 가능한 타입
Java의 기본 타입 중에서 순서 타입은? 사용자-정의 순서 타입 열거 타입 부분 범위 타입
23
열거 타입 열거 타입(enumeration type)은 모든 가능한 값들이 그 정의에서 제공되는, 즉 나열되는 타입
이 타입은 열거 상수(enumeration constants)라 불리는 이름 상수들의 모임을 정의하고, 그룹핑하는 방법을 제공 Ex. In C, enum days {Mon, Tue, Wed, Thu, Fri, Sat, Sun}; 열거 상수에는 묵시적으로 0, 1, .. 등의 정수가 순차적으로 할당
24
열거 타입 설계 고려사항 한 열거 상수가 한 개 이상의 타입 정의에 올 수 있는가? (그럴 경우에, 그러한 상수 참조에 대한 타입 검사가 어떻게 이루어지는가?) 열거 타입이 정수로 강제 변환 가능한가? 다른 타입이 열거 타입으로 강제 변환 가능한가?
25
열거 타입 예제 // in C enum colors {red, blue, green, yellow, black};
// 디폴트 내부값은 0, 1, … int main() { enum colors myColor = blue, yourColor = red; … myColor++; // 적법한가? myColor = 4; // 적법한가? }
26
열거 타입 언어 예 평가 C, C++, Java 5.0, C# 판독성 향상: 이름 상수가 코딩된 값보다 쉽게 인식 신뢰성 향상
열거 타입에 대한 산술 연산이 의미가 있는가? 열거 타입 변수에 범위를 벗어난 값을 배정 가능한가?
27
보고서 #6 (due 5/12) C, C++, Java, C#의 열거 타입을 다음 항목들의 관점에서 비교하라. 차이점을 보여주는 각 언어의 코드 예제를 들면서 설명하라. 한 열거 상수가 한 개 이상의 타입 정의에 올 수 있는가? (그럴 경우에, 그러한 상수 참조에 대한 타입 검사가 어떻게 이루어지는가?) 열거 타입이 정수로 강제 변환 가능한가? 다른 타입이 열거 타입으로 강제 변환 가능한가? 열거 타입에 대한 산술 연산이 의미가 있는가? 열거 타입 변수에 범위를 벗어난 값을 배정 가능한가?
28
부분 범위 타입(subrange types)
예제: 언어 예: in Ada, type Days is (mon, tue, wed, thu, fri, sat, sun); subtype Weekdays is Days range mon..fri; subtype Index is Integer range ; Day1: Days; Day2: Weekday; Day2 := Day1; // 컴파일러는 범위 검사 코드 생성 기존 타입에 대한 제약은 가능한 값들의 범위 부모 타입에 대해서 정의된 모든 연산은 명세된 범위 밖의 값들에 대한 배정을 제외하고는 부타입에 대해서도 정의
29
부분 범위 타입 평가: 판독성 향상 신뢰성 향상 최근의 언어에서 지원되지 않는 경향
부분 범위 타입 변수는 특정 범위의 값만을 저장할 수 있음을 알려줌 신뢰성 향상 명세된 범위를 벗어난 값을 부분 범위 변수에 배정하면 오류로 탐지 최근의 언어에서 지원되지 않는 경향
Similar presentations