보통 Delphi에서는 외부 공개용 const 를 interface 아래에 놓고 처리한다.

그런데 가끔 보면 한 유닛안에 몽땅 다 때려넣어서 꽤나 복잡해지는 경우가 있다.

이런때는 const를 연관된 Class내에 넣어버리면 명확하게 구분하여 사용할 수 있다.


unit MainLib;

interface

const
  CLASS_NAME = 'TMainClass';
  ARRAY_COUNT = 6;

위와 같이 CLASS_NAME const 상수가 있을때 MainLib를 uses에 추가한다면 ctrl+space로 code insight를 불러내면 바로 보여서 어느 유닛에 속해 있는지 한눈에 보이지 않게 된다.

게다가 아래에 다른 클래스가 있다면 이 const 상수가 어느 클래스와 연관이 있는지 찾기가 힘들다.


const 상수를 클래스에 아래와 같이 넣어본다.

type
  TMainClass = class
  const
    CLASS_NAME = 'TMainClass';
    ARRAY_COUNT = 6;
  end;


값을 쓰고 싶을때는 클래스 생성하지 않고도 불러다 쓸수 있다.

  ShowMessage( TMainClass.CLASS_NAME );



ps.
상속받은 클래스의 선언부에서 부모의 const를 사용하려고 하면 ARRAY_COUNT 상수를 찾을수 없다고 컴파일이 되지 않는다.

type
  TSubClass = class(TMainClass)
  strict private
    FIntegerArray: array[0..ARRAY_COUNT - 1] of Integer;
  end;

TMainClass.ARRAY_COUNT 로 변경하면 된다.
TSubClass의 구현부에서는 그냥 불러다 써도 된다.
아래의 예제를 참고한다.

type
  TSubClass = class(TMainClass)
  strict private
    FIntegerArray: array[0..TMainClass.ARRAY_COUNT - 1] of Integer;
  public
    procedure PrintMessage;
  end;

implementation

procedure TSubClass.PrintMessage;
begin
  ShowMessage( IntToStr(ARRAY_COUNT) );
end;

이제 const도 관련 Class안으로 넣어버리자!!!!!

+ Recent posts