인프런 커뮤니티 질문&답변

blood731님의 프로필 이미지
blood731

작성한 질문수

독하게 C를 배운 사람을 위한 선형 자료구조

ADT강의 관련 질문 있습니다.

해결된 질문

작성

·

123

·

수정됨

0

항상감사합니다.

ADT강의 보고 코드 확인하는 중 질문이 생겨 글 올립니다.

 

1.동적바인딩과 다형성 등 사용성 증가를 위해 구체 자료를 가리키는 추상화 자료노드를 구성하여 함수로 그 추상화자료노드에 일차적으로 접근하는 개념이 ADT라고 파악되는 데 여기에 함수 포인터를 구조체 맴버로 포함시킨 이유가 궁금합니다. 그냥 구조체 외부에 선언된 getkey 함수를 사용해서 sorting을 해도 기능상 차이는 없을 것 같은데 포함시키신 이유는 객체지향개념을 적용하기 위함인지 아니면 구조체 안의 함수포인터 변수로 실현된 getkey 함수가 외부에 선언된 getkey함수를 사용할 때와 비교해서 실제 기능상 차이가 있는지 궁금합니다.

 

2.함수포인터는 함수를 가리키는 포인터 변수로 함수의 이름과 같으면 안되는 것으로 알고 있는데 이 예제의 경우 컴파일 되는 것은 구조체 안의 포인터 변수라서 그런 것인지. 궁금합니다.

 

3.강의에서 언급해 주신 구조체 안의 함수포인터 개념을 너무 흥미있게 들었습니다. 그렇다면 그 개념의 연장선이 객체지향 클래스 개념이라고 보는데 결국 c언어는 절차지향. c++은 객체지향으로 단편적으로 구분되는 것이 아니라 c언어 프로그래밍시 하나의 기능단위 캡슐화를 시도하는 프로그래밍 기법이 객체지향이 아닌지. 그리고 그것을 구현하기 쉽게 만든 것이 c++같은 객체지향 프로그래밍 언어가 아닌가 하는 궁금증이 생겼습니다. 이런 관점에서 보자면 함수포인터는 결국 c언어 안에서 이미 함수형프로그래밍의 개념으로 접근할 수 있는 수단이 아닌지 하는 생각도 듭니다. 이러한 접근이 맞는 것인지 여쭤봅니다.

 

4.getkey함수가 name 이나 phone을 반환하는데 호출함수이름이 SortListByKey()가 적절하지 않나 궁금합니다.

 

5.기타 질문으로 lineardatastructure.c 파일 안의 한글이 깨져 보이는 문제가 있는데 비쥬얼 스튜디오 및 윈도우에서 utf-8으로 환경설정을 전부 변경해도 여전히 깨져 보입니다. 다른 해결방법이 있는지 궁금합니다.

 

 

감사합니다.

답변 2

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

  1. Key가 될 수 있는 정보가 무엇인지는 자료구조 수준에서 알 수 없기 때문입니다. 주소록이라면 이름이, 영화관리 프로그램이라면 영화 이름이, 책이라면 책이름이나 ISBN 코드 같은 것이 키 역할을 할 것입니다. 이는 객체지향 개념을 적용시키는 것이 아니라 현 시점에 관리 대상 데이터에 대한 의존성을 제거하기 위한 구조적 조치 입니다. 그리고 성능차이는 신경쓰지 않아도 될 수준입니다. C++의 가상함수와 동일한 수준이기 때문입니다.

  2. 함수의 이름과 같으면 안 될 이유는 없습니다. 식별자는 문법상의 오류가 없고 접근해 사용해야 할 스코프 내에서 중복 이슈가 없다면 전혀 문제가 없겠습니다. 뭔가 잘못 알고 있는 것 같습니다.

  3. C++는 구조화된 C에서 파생된 것입니다. 이러한 기법 자체가 OOP 전에 이미 사용되던 것이라 하겠습니다. 이런 부분 하나로 OOP를 논하는 것은 종교적 신념처럼 OOP를 논하시는 분들과 함수형 프로그래밍 개념을 학술적으로 논하는 분들 양쪽 모두에게서 받아들여지지 않을 확장입니다. 접근 자체야 주관적 판단이므로 문제가 될 것이 아니겠으나 학술관점의 접근은 신중이 생각해보시라 권합니다.

  4. 추상성을 더 높이면 그렇게 되겠습니다. 좋은 의견입니다. 😄

  5. 영문윈도우를 사용하고 계신 모양이네요. 운영체제 수준에서 설정을 변경해야 할 것 같습니다. 참고하시기 바랍니다. 😄

blood731님의 프로필 이미지
blood731
질문자

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

먼저 질문에 대한 구체적인 부분에 대한 답변은 제공된 정보 내에서 직접적으로 찾을 수 있는 내용이 없어, 전반적인 개념 위주로 답변 드리겠습니다.

  1. 동적 바인딩과 다형성 등을 위해 ADT(추상 데이터 타입)에서 함수 포인터를 구조체 멤버로 포함시키는 주된 이유는, 객체지향 개념을 절차적 언어인 C에서도 어느 정도 구현하기 위함입니다. 구조체 안의 함수 포인터를 통해 다형성 같은 개념을 실현할 수 있으며, 이는 객체지향 언어에서 클래스의 메소드가 객체마다 다르게 동작하는 것과 유사한 효과를 낼 수 있습니다. 기능상의 차이보다는, 설계상의 유연성과 객체지향적 접근을 가능하게 하는 것이 주된 목적입니다.

  2. 함수 포인터는 변수 이름이 함수 이름과 같을 필요가 없습니다. 예제에서 컴파일되는 이유는 구조체 내의 멤버 변수로서는 그 이름이 유효하기 때문입니다. 함수 포인터를 사용함으로써, 함수의 주소를 저장하고 해당 주소를 통해 함수를 호출할 수 있으므로, 다양한 함수를 동적으로 호출하는 데 활용됩니다.

  3. C언어에서의 함수 포인터 사용이나 구조체를 활용한 설계는 객체지향 프로그래밍의 일부 개념을 절차지향 언어 안에서도 구현할 수 있는 방법을 제공합니다. 이는 C언어로도 캡슐화, 일정 수준의 다형성 구현이 가능함을 보여주며, C++과 같은 객체지향 언어가 이러한 개념들을 더욱 체계적으로 지원한다고 볼 수 있습니다. 함수 포인터를 통한 다양한 함수의 호출은 함수형 프로그래밍의 개념으로도 접근할 수 있으며, 프로그래밍 패러다임의 경계는 때때로 모호할 수 있습니다.

  4. getkey 함수가 name이나 phone을 반환한다면, SortListByKey() 함수명이 해당 함수의 동작을 명확히 반영하고 있어 적절해 보입니다. 이는 키 값에 따라 리스트를 정렬하는 역할을 하는 것으로 추정됩니다.

  5. 한글이 깨져 보이는 문제는 환경설정 변경 외에도 파일 자체의 인코딩 문제일 수 있습니다. 파일을 저장할 때 사용된 인코딩 방식과 일치하도록 에디터나 개발 환경의 인코딩 설정을 맞추어야 합니다. 비주얼 스튜디오에서 파일을 열 때나 새로 저장할 때 인코딩 옵션을 조정할 수 있는데, 이를 UTF-8로 설정해 보는 것이 좋습니다. 또한, 명령 프롬프트에서 chcp 65001 명령을 사용하여 콘솔의 인코딩을 UTF-8로 변경해 볼 수도 있습니다.

각 질문에 대한 답변이 도움이 되었기를 바랍니다. 추가적인 질문이 있다면 언제든지 문의해주세요.

blood731님의 프로필 이미지
blood731

작성한 질문수

질문하기