리루

자료구조 & 소프트웨어 공학 소개 본문

# Algorithm

자료구조 & 소프트웨어 공학 소개

뚱보리루 2017. 1. 3. 01:17

자료구조


1. 효율성

 - 자료구조는 좀 더 효율적인 알고리즘이 될 수 있도록 자료를 구조화 시킨다. 자료를 탐색하기 위한 구조를 예로 들어보자. 단순하게 자료들을 배열에 넣고 원하는 자료를 찾을 떄까지 앞에서 차례대로 하나씩 비교하는 방법이 있따. 그러나 이 방법을 이용하면 모든 자료를 비교하는 일이 종종 발생하므로 비효율적이다. 이 경우에는 해시 테이블이나 이진 트리 같은 자료구조를 사용하면 훨씬 빠르게 탐색할 수 있다.


2. 추상화

 - 자료 구조는 자료를 바다 쉽게 이해할 수 있는 방법을 제공한다. 즉 문제 해결을 위한 어느 정도의 추상화를 제공한다. 자료를 스택에 넣는 예를 보면, 스택에 자료를 넣고 빼는 연산의 자세한 구현 방법보다는 그 연산을 어떻게 이용할 것인지에 초점을 찾출 수 있다. 즉 자료 구조를 이용하면 덜 프로그램적인 방법으로 프로그램에 대해 얘기할 수 있게된다.


3. 재사용성

 - 자료구조는 모듈화되어 있고 문맥이 자유롭기(context-free) 때문에 재사용이 가능하다. 자료구조를 사용하면 규정된 인터페이스를 통해서만 저장된 자료에 접근할 수 있으므로 모듈화된다. 즉, 인터페이스에 정의된 연산을 통해서만 자료에 접근할 수 있다. 자료구조는 다양한 형의 자료와 상황에 사용될 수 있으므로 문맥이 자유롭다. C언어에서는 자료 구조에 저장된 자료를 직접 관리하지 않고 데이터에 대한 무효(void) 포인터를 사용함으로써 자료 구조에 여러 형의 자료를 저장한다.



- 자료 구조에 대해 생각할 때 그 자료 구조에 대한 행위, 즉 연산도 함께 생각해야 한다. 리스트의 예에서는 삽입, 삭제, 순회 자료 개수 세기 등을 생각할 수 있다. 이와 같은 기본적인 연산들과 자료 구조를 합쳐서 추상 자료형이라 한다.

 - 추상자료형의 연산들은 추상 자료형의 공개 인터페이스(public interface)가 된다. 

 - 추상자료형의 공개 인터페이스는 그 자료형에 허용되는 것들을 형확하게 정의한다. 추상 자료형의 인터페이스를 만들고 지키는 것은 필수적인데, 그렇게 함으로써 프로그램의 자료 관리가 쉬워지고 그에 따라서 프로그램의 이해와 유지가 쉬워지기 때문이다.



소프트웨어 공학


 1. 모듈성

 - 소프트웨어 설계시 모듈성을 얻을 수 있는 하나의 방법은 블랙박스 개발에 초점을 맞추는 것이다. 사용자는 개발자가 규정한 공개 인터페이스를 통해서만 그 모듈에 접근할 수 있다. 결과적으로 사용자는 모듈의 상세 규현에 관심을 갖지 않아도 되고 모듈의 내부를 임의대로 변경하는 것도 불가능하다(자료의 은폐와 캡슐화의 기본이다.).


 2. 가독성

 - 의미있는 주석을 다는 것, 적절한 이름의 가진 식별자를 사용하는 것, 그 자체로 설명되는 코드를 만드는 것 등이 가독성이 좋은 프로그램을 만들 수 있는 몇가지 방법이다.


 3. 단순성

 

 4. 일관성

 - 코딩규칙을 정하고 그것을 준수하는 것이 중요하다. 이 규칙은 이해하기 쉬워야 한다.  규칙의 일관성은 가독성과 단순성을 증진시키다.




[참고] C로 구현한 알고리즘(카일 루든 저)

'# Algorithm' 카테고리의 다른 글

[자료구조] 해시 테이블  (0) 2017.01.15
[자료구조] 집합(set)  (0) 2017.01.12
[C언어] 재귀  (0) 2017.01.05
[C언어] 메모리 영억  (0) 2017.01.05
[C언어]포인터  (0) 2017.01.04