tony9402
1. 자료구조 기본 개념 본문
시스템 생명 주기(System Life Cycle)
요구사항
- 프로젝트들의 목적을 정의한 명세들의 집합
- 입력과 출력에 관한 정보를 기술
분석
- 문제들을 다룰 수 있는 작은 단위들로 나눔
설계
- 추상 데이터 타입(abstract data type) 생성
- 알고리즘 명세와 설계 기법 고려
정제와 코딩
- 데이터 객체에 대한 표현 선택
- 수행되는 연산에 대한 알고리즘 작성
검증
- 정확성 증명 : 수학적 기법들을 이용해서 증명
- 테스트 : 프로그램의 정확한 수행 검증, 프로그램의 성능 검사
오류 제거
- 독립적 단위로 테스트 후 전체 시스템으로 통합
객체 지향 설계
구조적 프로그래밍 설계와의 비교
- 유사점 : 분할 - 정복 기법 : 복잡한 문제를 여러개의 단순한 부분 작업으로 나누어 각각을 개별적으로 해결
- 차이점 : 과제 분할 방법
객체 지향 프로그래밍의 기본 정의와 개념
알고리즘적 분해와 객체 지향적 분해
알고리즘적 분해(함수적 분해)
- 고전적 프로그래밍 기법
- 소프트웨어를 기능적 모듈로 분해
- Pascal의 프로시저, FORTRAN의 서브프로그램, C의 함수
객체 지향적 분해
- 응용 분야의 개체를 모델링하는 객체의 집합
- 소프트웨어의 재사용성 향상
객체(object)
- 계산을 수행하고 상태를 갖는 개체
- 데이터 + 절차적 요소
객체지향 프로그래밍(object-oriented programming)
- 객체는 기본적인 구성 단위(building block)
- 각 객체는 어떤 타입(클래스)의 인스턴스(instance)
- 클래스는 상속 (inheritance)관계로 연관됨
데이터 추상화와 캡슐화
데이터 캡슐화
- 정보 은닉(information hiding)
- 외부로부터 데이터 객체의 자세한 구현을 은닉
데이터 추상화(data abstraction)
- 객체의 명세(specification)와 구현(implementation)을 분리
- 무엇(what)과 어떻게(how)를 명확하게 구분
데이터 타입
데이터 타입
- 객체들과 이 객체들에 대한 연산의 집합
C++의 데이터 타입
- 기본 데이터 타입
* char, int, float, double, etc
* 타입 수식어 : short, long, signed, unsigned
- 파생 데이터 타입
* 포인터 타입, 참조 타입
- 데이터를 묶어주는 구조
* 배열, 구조, 클래스
추상 데이터 타입
- 객체와 연산에 대한 명세가 객체의 표현과 연산의 구현으로부터 분리된 방식으로 구성된 데이터 타입
데이터 추상화와 데이터 캡슐화의 장점
소프트웨어 개발의 간소화
- 복잡한 작업을 부분 작업들로 분해
테스트와 디버깅
- 각 부분 작업을 독자적으로 테스팅, 디버깅
재사용성
- 자료 구조에 대한 코드와 연산을 추출해서 다른 소프트웨어 시스템에서도 사용
데이터 타입의 표현에 대한 수정
- 데이터 타입이 계속 똑같은 연산을 제공하고, 이들 연산이 계속 같은 기능을 하는 한 프로그램의 나머지 부분에 아무런 영향을 주지 않음
- 테이터 타입의 내부 구현에 직접 접근하는 연산들만 수정
알고리즘 명세
알고리즘
- 특정 작업을 수행하는 명령어들의 유한 집합
알고리즘의 요건
- 입력 : 외부에서 제공되는 데이터가 0개 이상
- 출력 : 적어도 한 개 이상의 결과 생성
- 명확성 : 각 명령은 명확하고 모호하지 않아야 함
- 유한성 : 알고리즘대로 수행하면 어떤 경우에도 반드시 종료
- 유효성 : 반드시 실행(구현) 가능해야 함
알고리즘 기술 방법
- 자연어
- 흐름도(flowchart)
- C++언어
'알고리즘 > 공부' 카테고리의 다른 글
2. Search algorithm (0) | 2018.09.16 |
---|---|
1. 알고리즘이란 (0) | 2018.09.16 |
2. 시간복잡도와 공간복잡도 (1) (0) | 2018.08.26 |
BFS/DFS 공부 메모 (0) | 2018.08.09 |
STL 기초 (0) | 2018.08.08 |