추상자료형으로 문제 풀 때..
아리알찬
안녕하세요, 죄송하게도 좀애매한 질문입니다...글로 표현하기가 좀힘드네요..시간 나는 분들 조언해주시면 감사하겠습니다...
지금 리스트 자료구조를 가지고 항공기 관리 프로그램을 짜는 중입니다. 대충 Airlines(항공사)와 Customer(고객) 전용 구조로 나눴습니다. 아래는 Customer.h의 일부입니다.
-----------------------------------------
#ifndef CUSTOMER_H_
#define CUSTOMER_H_
void Customer( FlightMng fMng );#endif
-----------------------------------------
이런 함수가 있고요, 아시다시피 이거를 외부에 공개해야main 함수에서 쓰기 때문에 위에 FlightMng라는 자료형을 명시해야 합니다.
-----------------------------------------
#ifndef CUSTOMER_H_
#define CUSTOMER_H_
typedef struct _simpleLinkedList* FlightMng;
void Customer( FlightMng fMng );
#endif
-----------------------------------------
struct _simpleLinkedList와 그밖에 연결리스트 관련 자료들은 모두 단순연결리스트.h에 정의되어 있습니다. 여기서 단순연결리스트.h는 Customer.c 소스화일에 포함시켜서내부에서만사용하게 했습니다.그런데 Cusomer는 외부로 공개해야 하고, 그러려면 FlightMng 자료형이 필요하므로 위와 같이 선언하면FlightMng 가 단순연결리스트를 가리키는 포인터라는 사실이 공개되는 꼴이죠. 물론 외부에서는 단순연결리스트를 사용할 수 없으므로 외부에서 영향을 미칠 수는 없겠지만,제가 생각하기에 단순연결리스트라는 구체적인 자료구조가 들통나는 것이 적절한지 의문입니다(이것이 정보 은폐라고 할 수 있는지 모르겠습니다).
그리하여이것을 아래처럼...
-----------------------------------------
#ifndef CUSTOMER_H_
#define CUSTOMER_H_
typedef struct _flightList* FlightMng;
void Customer( FlightMng fMng );
#endif
-----------------------------------------
이런 식으로 바꾸려고 해봤는데, 그러면 기존에열심히 만들어놨던 단순연결리스트에 정의했던소스의 명칭들을아예 통째로 바꿔야 하더군요. 노드 이름부터 리스트 이름까지. 예를 들어 struct _simpleLinkedListNode를 struct _flightListNode 이런 식으로...
그래서 제가 생각해낸 방법은 두 가지 중 하나입니다.
1. typedef struct _simpleLinkedList* FlightMng;
그냥 이렇게 사용한다. 어차피 외부에서는 단순연결리스트를 조작할 수 없다.
2. typedef struct _flightList* FlightMng;
기존의 단순연결리스트 자료구조의 명칭을 몽땅 바꾼다. 정보은폐를 철저하게 해야 한다. 대신 바꾸는 데 시간과 노력이 든다.이럴 때는 어떻게 해야 하나요..??
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676152 | 기본적인거 하나 질문드립니다. | 개미 | 2024-11-24 |
2676124 | 함수선언관련 질문이에요~...털썩..수정완료 (2) | 가지 | 2024-11-24 |
2676092 | C언어 책 (2) | 아서 | 2024-11-24 |
2676065 | 웹사이트 또는 메신저 등에서 원하는 텍스트를 검사하는방법?? (1) | 모든 | 2024-11-23 |
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |
2675356 | 2진수를 10진수로 바꾸려고 하는데 막히네요.. | 풀잎 | 2024-11-17 |