뭐든 기초를 확고히 하자. 자료구조가 바로 그 기초의 근간!! 알고리즘 실력을 늘릴 수 있을 것 같은 과목이다..
프로그래밍 언어를 접하고 코드를 기술하기 이전에 꼭 알고 넘어가야 하는 기초가 있다.
시스템 생명주기
- 요구사항
모든 경우에 대한 입력과 출력을 정밀하게 기술한다. - 분석
문제를 작은 단위로 나누어 상향식/하향식 접근 방법으로 세분화한다. - 설계
objects와 operations를 나누는 관점에서 시스템에 접근한다. 다르게 표현하면 objects는 과목, 학생, 교수이고 operations는 삽입, 삭제 등이 될 수 있다.
설계 시 구현(implementation)을 위한 결정 사항들, 예를 들어 트리를 쓸지, 전화번호 데이터도 포함시킬지 등은 가능한 뒤로 미룸으로써 선택한 언어의 범주 내에서 가장 효과적인 구현을 선택할 수 있도록 한다. - 정제와 코딩
자료 객체에 대한 표현을 선택하고 그 위에 수행되는 연산에 대한 알고리즘을 작성한다.
이 때 자료 객체의 표현 방법이 알고리즘의 효율성을 결정한다. (나는 array 썼는데 친구는 linked list 써서 더 효율적인 코드를 만들어낸 사례가 이를 증명한다!) - 검증
프로그램의 정확성 증명, 다양한 입력 데이터를 이용한 프로그램 테스트, 오류 제거 단계
객체 지향 설계
반대말은 구조적 프로그래밍 설계
'객체'는 그냥 기존에 변수 따로, 함수 따로의 분산적인 추상화 과정을 통합해서 표현대상을 좀 더 모듈화하기 쉽게 하는 도구라고 생각하면 된다.
예를 들어 차를 움직여 보자.
구조적 프로그래밍은 '차에게 앞으로 가게 시킨다. 차에게 속도 30km를 요구한다.'라면, 객체 지향적 프로그래밍은 차라는 객체 안에 앞으로 가는 모듈, 30km로 가는 모듈이 내재되어 있고, 상황에 따라 그 모듈들을 불러온다고 생각하면 쉽다.
데이터 캡슐화 + 추상화
캡슐화 : 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶고, 실제 구현 내용 일부를 내부에 감추어 은닉한다. C++에서의 일례로, 개인적인 정보 등을 class속 private 등의 방법으로 숨길 수 있다. (우리가 python에서 def로 함수를 만드는 것 또한 캡슐화의 일종이다)
추상화 : 위에서 말한 것처럼 우리가 차에게 '앞으로 가'라는 걸 시키는 게 아니라 차라는 객체 안에 그 모듈이 '무엇을', '어떻게' 하는지를 분리해서 저장하고 있다. (명세와 구현의 분리)
장점?
- 소프트웨어 개발 간소화 : 복잡한 작업을 부분 작업들로 분해하는 작업이므로
- 검사와 디버깅 단순화 : 부분 작업 가능
- 재사용성: 별개의 개체로 구현되니까 다시 쓰기 효과적
- 데이터 타입 표현의 수정 : 데이터 타입 내부 구현을 직접 접근하는 부분만 변경하면 된다.
'KAU > C++ 자료구조' 카테고리의 다른 글
다항식의 곱셈(C++ , overloading) (0) | 2022.06.09 |
---|---|
순열 생성 (0) | 2022.06.09 |
이원탐색(left, right, mid) + 순환 이원탐색 (0) | 2022.06.09 |
선택정렬 (가장 작은 걸 골라서 앞으로) (0) | 2022.06.09 |
원형큐를 이용해 카드 정렬하기 (0) | 2022.05.21 |