• 검색 결과가 없습니다.

안전한 프로그래밍 defensive programming

N/A
N/A
Protected

Academic year: 2021

Share "안전한 프로그래밍 defensive programming"

Copied!
10
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

안전한 프로그래밍

defensive programming

• 안전수칙 0 : 함수를 정의할 때 , 함수 타입에 맞는 데이터를 받는지 확인한다 . 꼬리표 + 기타 방식으 로 .

type checking

• 안전수칙 1 : 함수를 정의할 때 , 타입에 맞는 데이 터 중에서 원하는 경우의 데이터인지를 확인한다 . 꼬리표를 가지고 .

requirement checking

• 안전불감증 vs 안전집착 :

– 불감 보다는 집착이 좋다 .

– 실행중에 “옳지않은” 값이 나도 모르게 흘러다니는 것 보 다는 그럴 경우 바로 중단시키는 것이 좋다 .

(2)

(define (nth-child tree n)

(cond ((not (is-tree? tree)) (error)) ((not (is-int? n)) (error))

((is-leaf? tree) (error))

((is-empty-tree? tree) (error)) ((< n 0) (error))

(else …) ; programming in safe area )

)

type checking requirement checking

(3)

(define (nth-child tree n)

(cond ((not (is-tree? tree)) (error)) ((not (is-int? n)) (error))

((is-leaf? tree) (error))

((is-empty-tree? tree) (error)) ((< n 0) (error))

(else …) ; safe area ))

(define (is-tree? x) (and (pair? x)

(or (equal (car x) leaf-tag)

(and (equal (car x) node-tag)

(fold and (map is-tree? (cdr x)) #t) )

)))

(define is-int? integer?)

(4)

안전한 프로그래밍 , 불만은 없는가 ?

• type checking 코드를 꼭 장착해야 하는가 ?

– “ 분명히 필요없는 경우가 있긴 한데 . 그럴땐 필요없겠죠

… 그런데 불안하긴 해요… 모르겠네요 . 더 좋은 방법이 없을까요 ?”

– “ 내 프로그램의 실행속도가 문제될 것 같아요 . 함수실행 중에 매번 타입첵크를 하는 데 시간이 소모되잖아요 . 문 제될 때 곧바로 중단시켜야 문제를 그때 그때 파악하기 쉽 긴 할 텐데 .. 모르겠네요 . 더 좋은 방법이 없을까요 ?”

– “ 내 프로그램은 KRX-II 로켓의 진동보정 시스템에 장착될 거예요 . 돌다가 멈추면 안되는데 , 돌다가 문제되면 결국 은 멈출텐데… 모르겠네요 . 더 좋은 방법이 없을까요 ?”

(5)

프로그램 안전성 자동 검증기술 static type-checking system

• 프로그램에서 , 함수들의 인자타입에 맞는 데이타들이 항상 흘러드는지 미리 자동으 로 안전하게 확인 .

– “ 미리” : 실행전에 프로그램 텍스트만을 보면 서

– “ 자동으로” : 프로그래머가 하지 않는다 .

– “ 안전하게 확인” : 확인결과가 믿어도 된다 .

(6)

덕택에 ,

– “ 분명히 필요없는 경우가 있긴 한데 . 그럴땐 필요없겠죠

… 그런데 불안하긴 해요… 모르겠네요 . 더 좋은 방법이 없을까요 ?”

– “ 내 프로그램의 실행속도가 문제될 것 같아요 . 함수실행 중에 매번 타입첵크를 하는 데 시간이 소모되잖아요 . 문 제될 때 곧바로 중단시켜야 문제를 그때 그때 파악하기 쉽 긴 할 텐데 .. 모르겠네요 . 더 좋은 방법이 없을까요 ?”

– “ 내 프로그램은 KRX-II 로켓의 진동보정 시스템에 장착될 거예요 . 돌다가 멈추면 안되는데 , 돌다가 문제되면 결국 은 멈출텐데… 모르겠네요 . 더 좋은 방법이 없을까요 ?”

프로그램 안전성 자동 검증기술 static type-checking system

Stati c Typ e-Ch eckin g Stat ic Ty pe-C heck ing

Sta tic T ype -Ch eck ing

(7)

(define (nth-child tree n)

(cond ((not (is-tree? tree)) (error)) ((not (is-int? n)) (error))

((is-leaf? tree) (error))

((is-empty-tree? tree) (error)) ((< n 0) (error))

(else …) ; safe area ))

(define (is-tree? x) (and (pair? x)

(or (equal (car x) leaf-tag)

(and (equal (car x) node-tag)

(fold and (map is-tree? (cdr x)) #t) )

)))

(define is-int? integer?)

(8)

프로그램 안전성 자동 검증기술 static type-checking system

• ML 프로그래밍 실습을 통해 경험해 볼 것입니다 .

• C 나 Java 는 어때서요 ?

– 믿을 수 없는 static type-checking 기술 :

컴파일러의 type-check 결과가 “ ok” 인데 , 돌려보 면 type-error.

• Scheme 은요 ?

– type-check 미리 하지 않는다 .

– 모든것을 프로그래머에게 맡긴다 . “ 뜻대로 하소서 .”

(9)

데이타를 여러방식으로 구현할 때 Multiple Representations

• 데이터 구현방식마다 꼬리표를 붙이고 .

• 데이터 속내용 감추기 원리를 유지하면서 .

• 예를 들어 complex number data 구현방안들 을 생각해 보자

– complex number 만들기

• make-complex: real * real -> complex

– complex number 사용하기

• real: complex -> real

• imag: complex -> real

• mag: complex -> real

• angle: complex -> real

• add-complex: complex * complex -> complex

• mul-complex: complex * complex -> complex

(10)

add-complex mul-complex real imag mag angle

rectangular polar

representation representation

참조

관련 문서

1) 레크리에이션 프로그램은 모든 사람에게 평등한 참여 기회를 주어야 한다. 2) 프로그램이 건설적이며 교육적이어야 한다. 3) 단계적이며 체계적인

프로그래밍

프로그래밍

전류가 흐를때 1, 흐르지 않을 때 0으로만 숫자를 표현할 수 있음 이진수 한자리를 bit라 칭하고 8개의 bit는

 클래스계층 공유어프로치에서는, 부모(parent)클래스에 정의되어 있는 정보의 조작은 자식(child)클래스에서 정의되지 않고, 정의되지 않은 나머지 것만을

TransferDatabase 다른 데이터베이스 파일과의 가져오기, 내보내기, 연결 등을 지원한다. TransferSpreadsheet 스프레드시트

• 이번 실습에서는 Practice13_1 프로그램을 수 정하여, 곡선의 컨트롤 포인트를 마우스의 드 래깅으로 이동하여 곡선을 업데이트하도록 할 것이고, 곡선을

첫 번째 worker 함수 호출 10번 결과를 출력. 두 번째 worker 함수 호출