이전 정리글 ↓

 

[자료구조] 1. 자료구조 쉽게 이해하기

글을 쓰기에 앞서, C언어를 기반으로 서술함을 알립니다. 자료구조(Data Structure) 자료구조의 사전적 의미는 이렇다. 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저

w8err.tistory.com

 

 

글을 쓰기에 앞서, C언어를 기반으로 서술함을 알립니다. 

 

목차 

System Life Cycle의 개념 

알고리즘 명세 Algorithm Specification

 

System Life Cycle의 개념

System Life Cycle은 보통 S/W Life Cycle이라고도 칭한다.

소프트웨어 개발의 과정을 단계별로 나눈 것이다. 

 

보통은 위와 같이 요구사항 분석 - 시스템 분석 - 설계 - 구현 - 검증 5단계로 크게 나뉜다. 

해당 모델은 Waterfall Model(폭포수 모델) 이다. 

자료구조에선 이해만 하자. Life Cycle이 궁금하다면 검색해보자.

 

요구사항 분석(Requirements)

문제와 결과 정보를 규정한다. 

프로젝트의 방향성을 이해하는 단계.

 

시스템 분석(Analysis)

시스템 분석에는 상향식 설계(Bottom-Up Analysis)와 하향식 설계(Top-Down Analysis) 2개로 나뉜다.

 

상향식 설계

☞ 세부 기능의 구현을 초기에 강조

☞ 결과 프로그램은 세부 기능들의 조합임

☞  단점 : 주어진 문제의 고유 특성을 고려하지 않는 설계가 될 수 있다. 

 

하향식 설계

☞ 프로그램을 관리 가능한 세그먼트들로 분할

☞ 단점 : 도미노 효과가 발생 가능

 

도미노 효과?
한 가지 세그먼트에 문제가 발생했을 때, 연관된 요소 전부를 뜯어고쳐야 될 수도 있다. 

 

설계 단계(Design)

데이터와 연산의 관점에서 접근해, 실제로 구현이 가능하도록 계획하는 단계다.

프로그래밍 언어엔 독립적이다. 

 

☞ 데이터 관점 : 추상적 데이터 타입(Abstraction Data Type, ADT)으로 접근

먼저 데이터를 어떻게 구조화할지 고려하는 단계다.

이때 추상적 데이터 타입 (ADT)를 사용해 추상하여 필요한 요소들을 정한다. 

 

☞ 연산의 관점 : 알고리즘(Algorithm)으로 접근

데이터를 어떻게 처리할지를 생각하는 단계다.

 

구현 단계(Refinement and Coding)

괜히 아이콘을 삽으로 해놓은 것이 아니다. 굉장한 삽질이 필요한 시간. 

이때부터는 실제 구현 단계에 돌입한다. 

데이터의 구현 방법을 선택하고, 각 연산들의 구현 알고리즘을 선택해 개발한다. 

주요 고려 사항은 성능(Performance)이다. 

 

검증 단계(Verification)

구현을 완료했다면, 검증할 시간이다.

검증에도 몇 가지 프로세스가 있다.

 

정확성 증명(Correctness Proof)

☞ 수학적 기법으로, 시간이 많이 소요된다.

     매우 많이 소요되서 불가능할 수도 있다.

☞ 신뢰성이 높은 알고리즘들을 사용해 증명한다.

☞ 구현 단계 이전이나 구현 중에 진행 가능하다.

 

검사(Testing)

양질의 테스트 데이터는, 실행 코드의 모든 부분을 검사하는 것.

☞ 프로그램의 실행 시간(성능 고려)도 측정한다

 

오류 제거(Error Removal)

☞ 우리가 흔히 아는 디버깅이다. 경우에 따라 개빡셀 수도 있다.

☞ 문서화가 안 되어있고, 최적화가 되지 않은 코드를 디버깅 한다는건 ... 상상하기도 싫다. 

 

+ 좋은 프로그램이란, 1) 문서화가 되어있고  2) 전체 프로그램이 기능적으로 잘 분리되어 있는 프로그램이다.

 

 

알고리즘 명세(Algorithm Specification)

알고리즘의 정의는 이렇다.

어떤 일을 수행하기 위한 유한 개의 명령어들의 나열. 

프로젝트에서 사용될 알고리즘을 정의하고 설명하는 단계다.

이 명세는 소프트웨어 시스템에서 특정 작업이나 기능을 수행하기 위한 알고리즘의 여러가지 사항들을 나열한다. 

 

알고리즘이 만족해야 할 조건들

1장에도 설명되어 있지만, 복습하자.

☞ 입력(Input) : 0 혹은 그 이상의 입력이 존재해야 한다.

☞ 출력(Output) : 적어도 하나 이상의 결과물이 출력되어야 한다.

☞ 명확성(Definiteness) : 알고리즘을 구성하는 명령어들의 의미는 명확해야 한다. 

☞ 유한성(Finiteness) : 알고리즘은 유한 개의 명령어들을 수행한 후 종료되어야 한다.

☞ 실행가능성(Effectiveness) : 모든 명령어들은 실행 가능하여야 한다.

 

 

이렇게 실제 C언어로 자료구조를 구현해보기 전의 기본 개념들을 간단하게 알아봤다.

 

다음 정리글 ↓

 

[자료구조] 3. C언어 배열과 구조체

글을 쓰기에 앞서, C언어를 기반으로 서술함을 알립니다. 이전 정리글 ↓ [자료구조] 2. 자료구조 기본 개념[자료구조] 1. 자료구조 쉽게 이해하기 글을 쓰기에 앞서, C언어를 기반으로 서술함을

w8err.tistory.com

 

728x90
반응형