public 함수 수식자

public 함수 수식자

유닛 안에서 함수를 전역으로 선언하되, 다른 유닛·프로그램에서는 보이지 않게 만들고 싶을 때 쓰는 키워드가 public이에요. 오브젝트 파일 레벨에서는 접근 가능하지만 소스 레벨에서는 숨겨지는 함수를 만들 수 있어요.

출처: Free Pascal Reference 14.9.17 public

본문

Public 키워드는 유닛 안에서 함수를 전역으로 선언할 때 사용해요. 이 함수가 유닛 파일에서 접근 가능해서는 안 되지만(즉, 유닛을 사용하는 다른 유닛·프로그램에서 그 함수를 볼 수 없어야 하지만), 오브젝트 파일에서는 접근 가능해야 하는 경우에 유용해요. 예시를 볼게요.

Unit someunit;
interface
Function First : Real;
Implementation
Function First : Real;
begin
  First := 0;
end;
Function Second : Real; [Public];
begin
  Second := 1;
end;
end.

이 유닛을 사용하는 다른 프로그램·유닛은 Second 함수를 사용할 수 없어요. interface 부분에 선언되지 않았기 때문이에요. 하지만 Second 함수는 어셈블리 언어 레벨에서는 접근할 수 있어요. 그 함수의 맹글된 이름(mangled name)을 사용하면 되는데, 자세한 내용은 프로그래머 가이드에서 확인할 수 있어요.

public 수식자는 뒤에 name 지시어를 붙여 어셈블러 이름을 지정할 수도 있어요.

Unit someunit;
interface
Function First : Real;
Implementation
Function First : Real;
begin
  First := 0;
end;
Function Second : Real; Public name 'second';
begin
  Second := 1;
end;
end.

"public name" 지시어로 지정한 어셈블러 심볼은 'second'가 되며, 모두 소문자로 표기돼요.

더 알아보기

  • Free Pascal Reference의 프로시저·함수 수식자 섹션
  • Free Pascal 프로그래머 가이드의 맹글된 이름(mangled name)
  • 유닛의 interface/implementation 섹션 구조