Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

Introduction to Data Structures in Software Engineering, Lecture notes of Algorithms and Programming

A brief overview of data structures in computer science within the context of software engineering. It covers the importance of software development processes, the goals of software design, and the role of data structures in achieving high-quality software. It also discusses the significance of understanding data structures for effective problem-solving and efficient algorithm implementation.

Typology: Lecture notes

2017/2018

Uploaded on 10/23/2018

keehwan
keehwan ๐Ÿ‡จ๐Ÿ‡ฆ

20 documents

1 / 15

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
- 1 -
์ œ1์žฅ ์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ ๊ฐœ์š”
์ด ์žฅ์—์„œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•œ๋‹ค.
1.1. ๊ต์œก๋ชฉํ‘œ
์ด ์žฅ์˜ ๊ต์œก๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
๊ต์œก๋ชฉํ‘œ
์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ ˆ์ฐจ
๊ณ ํ’ˆ์งˆ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ชฉํ‘œ
์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก 
๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก 
์†Œํ”„ํŠธ์›จ์–ด ์ •ํ™•์„ฑ ๊ฒ€์ฆ ๋ฐฉ๋ฒ•
์ž๋ฃŒ๊ตฌ์กฐ ๊ฐœ์š”
1.2. ์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™
์†Œํ”„ํŠธ์›จ์–ด ์ ˆ์ฐจ
์†Œํ”„ํŠธ์›จ์–ด์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ  ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์ฝ”๋”ฉ ์™ธ์—
๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ์ด์Šˆ์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
ํŒ€ ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰์‹œ ๋”์šฑ ์ค‘์š”
์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๋‹จ๊ณ„
๋ฌธ์ œ ๋ถ„์„: ํƒ€๋‹น์„ฑ ์กฐ์‚ฌ, ์„ฑ๊ฒฉ, ๋ฒ”์œ„, ๋ชฉ์ 
์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„: ์‚ฌ์šฉ์ž ๋ฐ ์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ
์†Œํ”„ํŠธ์›จ์–ด ๋ช…์„ธ์„œ: not how but what
์„ค๊ณ„
์œ„ํ—˜ ๋ถ„์„
๊ตฌํ˜„
๊ฒ€์‚ฌ์™€ ๊ฒ€์ฆ
์šด์˜
์œ ์ง€๋ณด์ˆ˜ ์†Œํ”„ํŠธ์›จ์–ด ์ƒ๋ช…์ฃผ๊ธฐ(lifecycle)
not sequential!!!
๋ณดํ†ต ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฝ”๋”ฉ์„ ํ•˜๋Š” ๊ฒƒ๋งŒ์„ ์ƒ๊ฐํ• 
์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋”ฉ๋งŒ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐ€
์ง€ ๊ณผ์ •์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค. ํŠนํžˆ, ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด์ผ์ˆ˜๋ก ์ฝ”๋”ฉ๋ณด๋‹ค๋Š” ๋‹ค๋ฅธ ์ด์Šˆ๋“ค์ด ๋ณด
๋‹ค ๋” ์ค‘์š”ํ•ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ™€๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ํŒ€์„ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Partial preview of the text

Download Introduction to Data Structures in Software Engineering and more Lecture notes Algorithms and Programming in PDF only on Docsity!

์†Œํ”„ํŠธ์›จ์–ด ๋ช…์„ธ์„œ : not how but what ์„ค๊ณ„ ์œ„ํ—˜ ๋ถ„์„ ๊ตฌํ˜„ ๊ฒ€์‚ฌ์™€ ๊ฒ€์ฆ ์šด์˜ ์œ ์ง€๋ณด์ˆ˜

์†Œํ”„ํŠธ์›จ์–ด ์ƒ๋ช…์ฃผ๊ธฐ (lifecycle) not sequential!!!

(specification) ์ž‘์„ฑ, ์„ค๊ณ„, ๊ตฌํ˜„, ๊ฒ€์‚ฌ์™€ ๊ฒ€์ฆ, ์šด์˜, ์œ ์ง€๋ณด์ˆ˜ ๋“ฑ์˜ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ํ•˜์ง€๋งŒ

๊ฐœ๋ฐœํ•  ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ”„๋กœํ† ํƒ€์ž…ํ”„๋กœํ† ํƒ€์ž… (prototype) ๋˜๋Š” ์ผ๋ถ€ ๊ตฌ์„ฑ์š”์†Œ์˜ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค๋ฉด ๊ด€๋ จ ์‚ฌ๋žŒ๋“ค๊ฐ„์— ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ , ์œ„ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ณด๋‹ค ์ •ํ™•ํ•œ ๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์†Œํ”„ํŠธ์›จ์–ด์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™๊ณตํ•™ (software engineering): ๊ณ ํ’ˆ์งˆ์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๋ชจ๋“  ์ธก๋ฉด๊ณผ ๊ด€๋ จ๋œ ํ•™๋ฌธ์„ ๋งํ•จ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ๊ณผ ํ–‰์œ„ ( ๋ฌธ์„œํ™” , ํŒ€์›Œํฌ ๋“ฑ ) ๋ฅผ ๋ชจ๋‘ ํฌํ•จ ์†Œํ”„ํŠธ์›จ์–ด์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์„ธ์Šคํ”„๋กœ์„ธ์Šค (software process):^ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ์ธ ๋˜๋Š” ์กฐ์ง์ด ์‚ฌ์šฉํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ๊ธฐ์ˆ ์˜ ์ง‘ํ•ฉ์„ ๋งํ•จ ์‚ฌ์šฉํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ์ˆ  ๋˜๋Š” ๋„๊ตฌ ํ•˜๋“œ์›จ์–ด ์†Œํ”„ํŠธ์›จ์–ด : ์ปดํŒŒ์ผ๋Ÿฌ , ๋””๋ฒ„๊ฑฐ ๋“ฑ ์•„์ด๋””์–ด์›จ์–ด : ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ์ˆ ๊ณผ ๊ด€๋ จ๋œ ์ง€์‹

์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™(software engineering)์ด๋ž€ ๊ณ ํ’ˆ์งˆ์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๋ชจ๋“  ์ธก๋ฉด๊ณผ ๊ด€๋ จ๋œ

๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์„ธ์Šค(software process)๋ž€ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ์ธ ๋˜๋Š” ์กฐ์ง์ด ์‚ฌ

ํ”„ํŠธ์›จ์–ด ๊ธฐ์ˆ ์€ ํฌ๊ฒŒ ํ•˜๋“œ์›จ์–ด, ์†Œํ”„ํŠธ์›จ์–ด, ์•„์ด๋””์–ด์›จ์–ด(ideaware)๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์ด

์ผ๋ จ์˜ ์œ ํ•œ ์ ˆ์ฐจ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜(algorithm), ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ด ์ •๋ณด๋ฅผ ๋ชจ๋ธ๋ง

Panic and do nothing 39% Panic and drop the course 30% Sit down at the computer and begin typing 27% Stop and think 4%

์˜ˆ์˜ˆ 1.1)1.1) ATM ๊ธฐ๊ณ„

ATM ์€ ์นด๋“œ๋กœ๋ถ€ํ„ฐ ๊ณ„์ขŒ๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ธ๋‹ค.

ATM ์€ PIN ๋ฒˆํ˜ธ๋ฅผ ์š”์ฒญํ•˜๋ฉด ๊ณ ๊ฐ์€ PIN ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

ATM ์€ PIN ๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•œ๋‹ค.

ATM ์€ ๊ฑฐ๋ž˜ ์ข…๋ฅ˜ ( ์ž…๊ธˆ , ์ด์ฒด , ์กฐํšŒ , ์ข…๋ฃŒ ) ๋ฅผ ๋ฌผ์–ด๋ณธ๋‹ค.

๊ณ ๊ฐ์€ ์กฐํšŒ๋ฅผ ์„ ํƒํ•œ๋‹ค. ATM ์€ ๊ณ„์ขŒ์˜ ํ˜„์žฌ ์ž”์•ก์„ ์ฝ๊ณ 

ATM ์€ ๊ฑฐ๋ž˜ ์ข…๋ฅ˜๋ฅผ ๋‹ค์‹œ ๋ฌผ์–ด๋ณธ๋‹ค.

๊ณ ๊ฐ์€ ์ข…๋ฃŒ๋ฅผ ์„ ํƒํ•œ๋‹ค. ATM ์€ ์€ํ–‰์นด๋“œ๋ฅผ ๋˜๋Œ๋ ค์ค€๋‹ค.

์ถ”์ƒํ™”์ถ”์ƒํ™” (abstraction): ํŠน์ • ๊ด€์ฐฐ์ž ์ž…์žฅ์—์„œ ์‹œ์Šคํ…œ์˜ ํ•„์ˆ˜์ ์ธ ์‚ฌํ•ญ๋งŒ์„ ํฌํ•จํ•˜๋Š” ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋ชจ๋ธ ๊ด€์ฐฐ์ž๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ ๋ถˆํ•„์š”ํ•œ ํ•˜์œ„ ์ˆ˜์ค€์˜ ์„ธ๋ถ€์‚ฌํ•ญ์— ๋Œ€ํ•œ ๊ณ ๋ ค ์—†์ด ์ ์ ˆํ•œ ์ˆ˜์ค€์—์„œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. (stepwise-refinement) ์ถ”์ƒํ™”๋œ ๊ฒƒ์€ ์ ์ง„์ ์œผ๋กœ ์„ธ๋ถ„ํ™”๋˜์–ด ๊ตฌ์ฒดํ™”๋œ๋‹ค. ํ•˜ํ–ฅ์‹ (top-down) ์ƒํ–ฅ์‹ (bottom-up) ๊ฐ์ฒด์ง€ํ–ฅ ์ ‘๊ทผ ๋ถ„ํ• ์ •๋ณต๋ถ„ํ• ์ •๋ณต (divide-and-conquer): ๋ณต์žกํ•œ ๋ฌธ์ œ์ผ ์ˆ˜๋ก ํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ต๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ๋จผ์ € ์„ ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์ถ”์ƒํ™”(abstraction)์ด๋‹ค. ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ

์ „์ฒด ๋ฌธ์ œ์˜ ์ž‘์€ ์ผ๋ถ€๋ถ„์„ ๋ชจ๋“ˆ๋ชจ๋“ˆ (module) ์ด๋ผ ํ•œ๋‹ค. ์ •๋ณด์ •๋ณด ์€๋‹‰์€๋‹‰ (information hiding):^ ๋ชจ๋“ˆ์€ ๊ทธ๊ฒƒ์˜ ๋ณต์žกํ•œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ˆจ๊ธด๋‹ค. ๋ณต์žก์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋ชฉ์  ๋ชจ๋“ˆ์€ ๊ทธ๊ฒƒ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค. ๋ชจ๋“ˆ์˜ ์š”๊ตฌ์‚ฌํ•ญ ๋А์Šจํ•œ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ฑ๊ฒฐํ•ฉ์„ฑ (loosely-coupled): ๋ชจ๋“ˆ์€ ์ƒํ˜ธ ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•œ๋‹ค. ํ•œ ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์ด๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ๋†’์€๋†’์€ ์‘์ง‘์„ฑ์‘์ง‘์„ฑ (highly-cohesive): ์ž˜ ์ •์˜๋œ ๋‹จ์ผ ์ž‘์—…๋งŒํ•ด์•ผ ํ•œ๋‹ค.

์„ ๋ชจ๋“ˆ(module)์ด๋ผ ํ•œ๋‹ค. ๋ชจ๋“ˆ์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์ •๋ณด ์€๋‹‰์ด๋‹ค. ์ฆ‰, ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ทธ๊ฒƒ์˜

๊ฐ์ฒด์ง€ํ–ฅ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์„ค๊ณ„ (object-oriented design) ๋Š” ๋ฌธ์ œ์—์„œ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๊ณ  , ์ด ๊ฐ์ฒด๋“ค์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ๋งํ•œ๋‹ค. ( ๋ช…์‚ฌ ) ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์‹ค์„ธ๊ณ„์™€ ๊ฐ€๊น๊ฒŒ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์žˆ์Œ ๊ตฌ์กฐํ™”๋œ๊ตฌ์กฐํ™”๋œ ์„ค๊ณ„์„ค๊ณ„ (structured design) ๋Š” ๋ฌธ์ œ์—์„œ ํ–‰์œ„๋ฅผ ์‹๋ณ„ํ•˜์—ฌ ํ–‰์œ„ ์œ„์ฃผ๋กœ ๋ชจ๋ธ๋งํ•œ๋‹ค. ( ๋™์‚ฌ ) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์‹ฌ

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์„ธ๊ฐ€์ง€ ํ•ต์‹ฌ ์š”์†Œ

1. ์บก์Аํ™” (encapsulation): ๋ฐ์ดํ„ฐ์™€ ํ–‰์œ„์˜ ๊ฒฐํ•ฉ 2. ์ƒ์† (inheritance): ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ 3. ๋‹คํ˜•์„ฑ (polymorphism): ์‹คํ–‰์‹œ๊ฐ„์— ๊ฐ์ฒด์— ์˜ํ•ด ํ–‰์œ„๊ฐ€ ๊ฒฐ์ •๋จ

์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค๊ณผ ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ (brainstorming) ์„ ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ๊ฐํ•ด๋ณธ๋‹ค.

ร† ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค

์ง€๋ผ๋Š” ๊ฐœ๋…์€ ํ•„์š” ์—†๊ณ , ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ์‚ฌ๋žŒ์˜ ์ฃผ์†Œ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋Š” ํ•ญ(entry)์ด

๋‹ค์Œ์—๋Š” ๊ฐ ๊ฐ์ฒด๋งˆ๋‹ค CRC(Class, Responsibility, Collaboration) ์นด๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ, ๊ฐ ๊ฐ์ฒด

๊ฐ ๊ฐ์ฒด๋งˆ๋‹ค CRC(Class, Responsibility, Collaboration) ์นด๋“œ๋ฅผ ์ž‘์„ฑ

์—†์Œ

name ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ด๋ฆ„์„

name ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์„ฑ์„

ํ˜‘๋™

์ฃผ์†Œ ์ œ๊ณต

์ „์ฒด ์ด๋ฆ„์„ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์ œ๊ณต

์ฑ…์ž„

์ฃผ์š” ์ฑ…์ž„ : ์ฃผ์†Œ๋ก ํ•œ ํ•ญ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

ํด๋ž˜์Šค ์ด๋ฆ„ : entry ๋ถ€๋ชจ ํด๋ž˜์Šค : ์ž์‹ ํด๋ž˜์Šค :

์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์˜ค๋ฅ˜ (compile-time error): ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ์‹คํ–‰ ์‹œ๊ฐ„ ์˜ค๋ฅ˜ (run-time error) ์ž˜ ๋ชป๋œ ๊ฐ€์ • : result = dividend / divisor ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์˜ค๋ฅ˜ ๋…ผ๋ฆฌ ์˜ค๋ฅ˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๋•Œ ๊ทธ๊ฒƒ์„ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ•๊ฑด์„ฑ (robustness) ์ด๋ผ ํ•œ๋‹ค. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (exception handling) ์„ค๊ณ„๋ถ€ํ„ฐ ์–ด๋–ค ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•จ what, where, how

์‚ฌ์ „์กฐ๊ฑด์‚ฌ์ „์กฐ๊ฑด (precondition): ์‚ฌํ›„์กฐ๊ฑด์ด ๋ณด์žฅ๋˜๊ธฐ ์œ„ํ•ด ๋ฉ”์†Œ๋“œ์— ์ง„์ž…ํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” ๊ฐ€์ • ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ์ฑ…์ž„ ์‚ฌ์ „์กฐ๊ฑด์ด ์œ„๋ฐฐ๋œ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ? ๋ฐฉ๋ฒ•๋ฐฉ๋ฒ• 1.1. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•๋ฐฉ๋ฒ• 2.2.^ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‚ฌํ›„์กฐ๊ฑด์‚ฌํ›„์กฐ๊ฑด (postcondition): ์‚ฌ์ „์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์—ˆ์„ ๋•Œ , ๊ธฐ๋Œ€๋˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ ์–ด๋–ป๊ฒŒ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Œ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ฑ…์ž„ ์‚ฌ์ „ , ์‚ฌํ›„์กฐ๊ฑด์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ์ดํ•ด๊ฐ€ ์—†์œผ๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋…ผ๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ๋ฒ”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ข…๋ฅ˜์ข…๋ฅ˜^ 1.1.^ ๋ฐ˜ํ™˜ ๊ฐ’์˜ ์ •ํ™•์„ฑ

์‚ฌ์ „ , ์‚ฌํ›„์กฐ๊ฑด์˜ ์˜ˆ ) void RemoveLast() ํšจ๊ณผ : ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. ์‚ฌ์ „์กฐ๊ฑด : ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ์‚ฌํ›„์กฐ๊ฑด : ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์žˆ๋‹ค.

WARNING If you try to execute this operation when the preconditions are not true, the results are not guaranteed

Deskchecking โ€“ Design

๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ๊ฒ€์‚ฌ๋ฅผ ํ•œ๋‹ค. ๋ฐ˜๋ฉด์— desk checking์ด๋ž€ ์„ค๊ณ„์„œ๋‚˜ ํ”„๋กœ๊ทธ

๋ฃจํ”„๋ฃจํ”„ ๋ถˆ๋ณ€์กฐ๊ฑด๋ถˆ๋ณ€์กฐ๊ฑด (loop invariant): ๋ฃจํŠธ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „ , ๋ฃจํ”„๊ฐ€ ๋ฐ˜๋ณต๋œ ํ›„ , ๋ฃจํ”„๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„์— ํ•ญ์ƒ ๋งŒ์กฑ๋˜์–ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ๋งํ•œ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ •ํ™•์„ฑ์„ ์ถฉ์กฑ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์˜ˆ์˜ˆ 1.2)1.2) ๋ฐฐ์—ด item ์— ์žˆ๋Š” ์š”์†Œ๋“ค์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ int sum = 0; int i = 0; while(i<n){ sum += item[i]; i++; }

๋ฃจํ”„ ๋ถˆ๋ณ€์กฐ๊ฑด. sum ์€ item[0] ๋ถ€ํ„ฐ item[i-1] ๊นŒ์ง€์˜ ํ•ฉ์ด์–ด์•ผ ํ•œ๋‹ค.

๋ฃจํ”„์˜ ์ •ํ™•์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฃจํ”„ ๋ถˆ๋ณ€์กฐ๊ฑด(loop invariant)์„ ํ™•์ธ

์ž๋ฃŒ๊ตฌ์กฐ(data structure)๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ์ปดํ“จํ„ฐ์— ํ‘œํ˜„, ์ €์žฅ, ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค.

๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ผ ํ•˜๋ฉด ๊ฐ’ (value) ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ ๋ฐ์ดํ„ฐ๋ฐ์ดํ„ฐ ํƒ€์ž…ํƒ€์ž… : ๋‹ค์Œ ๋‘ ๊ฐ€์ง€์— ์˜ํ•ด ์ •์˜๋œ๋‹ค. ์ด ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ. ์˜ˆ์˜ˆ 1.3)1.3) ์ •์ˆ˜ ์ด ์š”์†Œ๋“ค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์˜ ์ง‘ํ•ฉ. ์˜ˆ์˜ˆ 1.4)1.4) ์‚ฌ์น™์—ฐ์‚ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋‘ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ œ๊ณตํ•œ๋‹ค. ์‹œ์Šคํ…œ ์ •์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋‹จ์ˆœ๋‹จ์ˆœ ํƒ€์ž…ํƒ€์ž… ( ์›์ž ํƒ€์ž… , ์›์‹œ ํƒ€์ž… ): ๋” ์ด์ƒ ๋ถ„ํ•ดํ•  ์ˆ˜ ์—†๋Š” ํƒ€์ž… ๋ณตํ•ฉ๋ณตํ•ฉ ํƒ€์ž…ํƒ€์ž… : ์—ฌ๋Ÿฌ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ํƒ€์ž… ร† ์š”์†Œ ์ ‘๊ทผ ์—ฐ์‚ฐ ๊ตฌ์กฐํ™”๋œ ํƒ€์ž…๊ณผ ๋น„๊ตฌ์กฐํ™”๋œ ํƒ€์ž… ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…

์ ˆ์ฐจ์˜์ ˆ์ฐจ์˜ ์ถ”์ƒํ™”์ถ”์ƒํ™” (procedural abstraction) ๋ฉ”์†Œ๋“œ์˜ ๋ชฉ์ ๊ณผ ๊ทธ๊ฒƒ์˜ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌ ๋ฐ์ดํ„ฐ๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”์ถ”์ƒํ™” (data abstraction, encapsulation) ๋ฐ์ดํ„ฐ์— ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ๊ณผ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ๋ฒ• ๋ฐ ์—ฐ์‚ฐ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌ ์ถ”์ƒ์ถ”์ƒ ๋ฐ์ดํ„ฐ๋ฐ์ดํ„ฐ ํƒ€์ž…ํƒ€์ž… (ADT, Abstract Data Type) ํŠน์ • ๊ตฌํ˜„๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ํŠน์„ฑ์ด ๋ช…์‹œ๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” int ํƒ€์ž… ์—ญ์‹œ ADT ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๊ฒƒ์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ชฐ๋ผ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜๊ณ  ์žˆ๋Š” ์ •์ˆ˜ํ˜• ํƒ€์ž…์ธ int์˜ ๊ฒฝ์šฐ์—๋„ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜์–ด ์žˆ๊ณ ,

์ž…(ADT, Abstract Data Type)์ด๋ผ ํ•œ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ์ž๋ฃŒ๊ตฌ์กฐ (data structure) ์ •์˜์ •์˜ 1.1.^ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์œผ๋กœ์„œ ๋ฐ์ดํ„ฐ๋ฐ์ดํ„ฐ ์š”์†Œ๋“ค์š”์†Œ๋“ค ์˜์˜ ๋ชจ์Œ๋ชจ์Œ์„ ๋งํ•œ๋‹ค. ์ด์ด ๋ชจ์Œ์˜๋ชจ์Œ์˜ ๋…ผ๋ฆฌ์ ๋…ผ๋ฆฌ์  ๊ตฌ์„ฑ์€๊ตฌ์„ฑ์€ ๊ฐœ๋ณ„๊ฐœ๋ณ„ ์š”์†Œ์š”์†Œ ๊ฐ„์—๊ฐ„์— ๋…ผ๋ฆฌ์ ๋…ผ๋ฆฌ์  ๊ด€๊ณ„๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ •์˜์ •์˜ 2.2. ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ ‘๊ทผ์ ‘๊ทผ ์—ฐ์‚ฐ์—์—ฐ์‚ฐ์— ์˜ํ•ด์˜ํ•ด ํŠน์ง•ํŠน์ง•์ง€์–ด์ง„๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ADT ๋กœ ๊ตฌํ˜„๋œ๋‹ค.