C언어와 C++, 그리고 java를 이용해서 Desktop Project를 구현하였습니다.
먼저 주소록(AddressBook)과 단어장(WordBook)을 자료구조 배열을 이용하여 구현하였습니다.
배열의 특성상 크기가 한정되어 있는 것부터 시작하여서 length가 capacity보다 같거나 커지면
힙에 새로운 배열을 할당하여 크기를 늘린 배열을 생성하고, 예전에 배열의 배열요소들을
직접 옮기는 작업도 해보았습니다.
이를 바탕으로 하여 직접 배열라이브러리를 만들어 보고, 이를 제가 만든 프로그램인 주소록과 단어장에
직접 적용해보는 과정도 거쳤습니다.
이렇게 만든 프로그램을 메인테스트 시나리오를 통해 제대로 돌아가는지 테스트하였습니다.
테스트 이후에는 C언어와 java로는 콘솔창을 이용하는 CUI프로그래밍을 통해 프로그램을 사용자가 사용할 수 있도록 구현하였습니다.
CUI프로그래밍 이후에는 C언어로는 WIN32API를 통해 GUI프로그래밍을 하여 좀 더 사용자가 사용하기 쉽도록 구현하였습니다.
C++ 는 CUI는 따로 하지 않고, MFC를 이용하여 바로 GUI프로그래밍을 하였고, java는 GUI 프로그래밍 구현을 하지 않았습니다.
CUI에서 구분선을 만들거나 콘솔창 가운데 메뉴창 등을 정렬을 시키기 위해 printf를 남발하는 과정을 통해서
GUI프로그래밍 구현시 직관적으로 바로 버튼이나 위치조정이나 각각의 윈도우를 만들수 있음에 대한 감사함(?)을 느낄 수 있었습니다...;;
그리고 무엇보다 배열을 이용해 프로젝트를 하다보니 배열의 여러 가지 특성을 배울 수 있었습니다.
배열은 동일한 자료형의 변수를 처음(0)부터 시작하여 순차적으로 저장하는 자료구조입니다.
이를 통해 프로그래머는 변수1, 변수2, 변수3... 이런식으로 변수를 만들 필요가 없어졌고, 배열 하나로 다수의 동일한 자료형의 변수들을
관리할 수 있게 되었습니다.
또한 순차적으로 증가하는 배열첨자와 그에 상응하는 배열요소(이는 어떻게 보면 해쉬맵의 Key와 Value와 조금은 유사하다고 생각합니다.)
로 인해 배열요소(값)을 구할 때 배열첨자로 바로 접근을 할 수 있기 때문에 속도가 매우 빠릅니다.
하지만 만약 배열의 크기까지 배열요소가 차서 크기가 더 큰 새로운 배열을 만들어야 하는 경우가 발생하면
이전 배열의 배열요소들을 일일이 새로 만든 배열의 배열요소에 옮겨야 하는 부담이 있습니다.
이러한 과정은 시간을 많이 소모하기 때문입니다.
그래서 배열의 경우 처음 만들 때부터 사용량(length)을 신중히 고려하여 할당량(capacity)를 넉넉하게 잡아두는 것이 좋습니다.
배열 요소에서 순차적으로 새로운 배열요소를 추가하거나(=마지막 배열요소 다음에 새로운 배열요소를 추가), 마지막 배열요소를 삭제하는 경우는 쉽게 할 수 있습니다.
하지만 배열요소와 배열요소의 사이에 새로운 배열요소를 삽입을 하거나 제일 처음에 새로운 배열요소를 삽입하는 경우는 큰 일이 됩니다.
왜냐하면 새로 삽입한 배열요소 이후의 모든 배열요소들의 배열첨자들을 전부 +1하여 수정해줘야 하기 때문입니다.
또한 배열요소와 배열요소의 사이에 배열요소를 삭제하거나 제일 처음의 배열요소를 삭제하는 경우도 마찬가지입니다.
이 경우 삭제한 배열요소 이후의 모든 배열요소의 배열첨자들을 전부 -1하여 수정해줘야하기 때문입니다.
이처럼 배열의 단점도 있지만 장점(순차적으로 저장하기 때문에 원리가 간단하여 쉽게 접근할 수 있으며, 테이블 형식으로 나타내기도 편함) 이 훨씬 더 크기 때문에 가장 보편적으로 사용하는 자료구조가 배열이 아닐까 싶습니다.
-
Notifications
You must be signed in to change notification settings - Fork 0
injae7034/Array_Desktop_Project_C_CPlusPlus_Java
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
About
배열 자료구조를 활용해 주소록과 단어장 프로젝트를 C와 C++ 그리고 java로 각각 구현하였습니다. 가계부 역시 배열을 활용하고 여기에 추상클래스와 상속 및 다형성 개념을 활용해 C++와 Java로 구현하였습니다.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published