왜 헤더 파일을 작성해야합니까?


12

당신이 당신의 엉뚱한 의견을 내놓기 전에, 나는 이것이 nooby 질문이라는 것을 알고 있습니다. C 기반 언어를 사용한 것은 이번이 처음입니다.

저는 모바일 개발에 대한 컴퓨터 과학 코스의 목표 C를 배우는 저학년 학생입니다. 학업 환경에서 소규모 프로젝트를 구축하거나 소규모 팀에서 일하는 등 많은 실제 고려 사항이 필요하지 않다는 것을 알고 있습니다.

그러나 우리 교수는 모든 .m 구현 파일에 대해 .h 헤더 파일을 요구하고 XCode를 지원합니다. 나에게는 그것은 바쁜 일처럼 보인다. 모든 메소드 서명과 인스턴스 변수를 다른 파일로 복사해야합니다. 한 파일을 변경하면 다른 파일과 일치하는지 확인해야합니다. 그런 작은 성가신 것 같습니다.

그러나 헤더 파일 에는 실제 사용이 필요 하다는 것을 알고 있습니다. 큰 대답은 두 가지 모두를 다룰 것입니다.

  1. 구현 파일에 적합하지 않은 헤더 파일은 무엇입니까? 그 목적은 무엇입니까?
  2. 프로그래머로서 왜 헤더 파일을 수동으로 작성해야합니까? 쉽게 자동으로 생성 될 수있는 것 같습니다.

미리 감사드립니다!


XCode는 자동 리팩토링을 지원하므로 헤더에서 서명을 변경하면 자동으로 구현으로 전파되고 그 반대도 마찬가지입니까? 아니면 그것을 지원하는 플러그인이 있습니까? 수동으로하는 것이 고통 스럽다는 것을 알고 있습니다.
FrustratedWithFormsDesigner

헤더 파일에 대해 알게되었을 때의 첫 번째 반응은 "자동으로 수행 할 수있는 방법이 있습니다"였습니다. 도움이 될만한 도구를 검색하려고 시도했을 때 큰 선택을 찾지 못했습니다.
Hartley Brody

그런 기능이 존재하지 않는다는 것에 놀랐습니다. Eclipse가 Java에 대해 리팩토링을 수행 할 수 있다는 것을 알고 C / C ++ 플러그인이 헤더 / impl 리팩토링을 수행 할 수 있는지 여부를 모르겠습니다. XCode에 그러한 도구가 없으면 개발할 가치가있는 것 같습니다. ;)
FrustratedWithFormsDesigner

답변:


9
  1. 한마디로;

    • 헤더 파일은 모듈의 API를 정의합니다. 제 3자가 호출 할 수있는 방법 인 계약 목록입니다. 이 모듈은 타사의 블랙 박스로 간주 될 수 있습니다.

    • 구현은 모듈을 구현합니다. 블랙 박스 내부입니다. 모듈 개발자는 이것을 작성해야하지만 써드 파티 모듈의 사용자는 구현에 대해 알 필요가 없습니다. 헤더에는 필요한 모든 정보가 포함되어야합니다.

  2. 헤더 파일의 일부 부분 (메서드 선언)은 자동으로 생성 될 수 있습니다. 구현에 API의 일부를 형성하지 않고 헤더에 속하지 않는 개인 메소드가있을 수 있으므로 구현에 주석을 달아야합니다.

헤더 파일에는 때때로 다른 정보가 들어 있습니다. 유형 정의, 상수 정의 등. 이들은 구현이 아닌 헤더 파일에 속합니다.


그러나 누군가 내 코드를 사용해야하지만 .h 파일에만 액세스 할 수있는 상황에 처한 사람은 언제입니까? .m을 실행하는 데 여전히 필요하지 않습니까?
Hartley Brody

1
구현 세부 사항을 변경하는 경우 이론적 수준에서 추상화가 필요하다는 것을 이해하지만 이러한 상황이 언제 발생하는지 확실하지 않습니다.
Hartley Brody

10
때로는 상업적인 이유로 누군가가 귀하의 코드를 사용하도록 허용하고 싶지만 구현에 액세스하지 못하는 경우가 있습니다. 이 경우 헤더 파일과 이미 컴파일 된 라이브러리 또는 객체 코드를 제공합니다.
Luke Graham

아 알 겠어. 코드가 이미 컴파일되어 사용 가능하지만 읽을 수는 없다고 생각하지 않았습니다. 감사!
Hartley Brody

3
또한 코드를 사용하는 방법을 알기 위해 구현을 읽고 싶은 이유는 무엇입니까? 헤더 파일을 읽기에 충분해야합니다.
당 Johansson

5

헤더의 주된 이유는 #include다른 파일에서 헤더를 사용할 수 있기 때문에 다른 파일에서 한 파일의 함수를 사용할 수 있습니다. 헤더에는 함수 자체가 아닌 함수 를 사용할 수있을 정도로만 포함되어 있으므로 컴파일하는 것이 훨씬 빠릅니다.

프로세스를 아주 잘 자동화하는 편집기를 작성한 사람이 없기 때문에 두 가지를 따로 따로 유지합니다. 그들이 그렇게 할 수 없었던 많은 이유 가 없으며 , 일부는 시도조차 했었습니다. 그러나 그렇게 한 편집자들은 시장에서 그다지 잘하지 않았으며, 더 많은 주류 편집자들은 그것을 채택하지 않았습니다.


2

헤더를 포함하면 코드가 다른 곳에서 작성되고 소프트웨어 프로젝트 / 빌드의 일부일 수도 있고 아닐 수도 있지만 소프트웨어를 빌드 할 때 '링커'에서 찾을 수있는 함수 나 메소드를 호출 할 수 있습니다.

예를 들어, 표준 C 라이브러리에서 함수를 호출 할 때 해당 함수의 모든 내부를 프로젝트에 넣지 않아도됩니다. 프로그램에서이를 호출 할 수있을 것으로 기대합니다.

그러나 컴파일러는 코드를 볼 수없고 헤더가 그렇게해도 함수가 어딘가에 존재한다는 것을 알아야합니다. 컴파일러가 완료되면 링커가 호출되고 라이브러리 호출과 같이 매달려있는 코드 비트를 '링크'하려고합니다.


1

헤더 파일은 주로 다른 파일에서 함수의 서명 (예 : 함수 이름, 반환 값 및 인수)을 선언하고 포함하는 데 사용됩니다. 컴파일러는 파일을 함께 컴파일하고 링크 할 때 이러한 서명을 알아야합니다.

자세한 내용은 기사를 읽으십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.