먼저 private와 protected를 모르겠다면 OOP의 encapsulation에 관해 공부를... -_-a


Delphi의 Class는 멤버 접근에 독특한 특징이 있다.

private이나 protected로 지정이 되어있다고 하더라고 같은 유닛에 있는 클래스라면 접근이 가능하다.

사용할때는 편하지만 설계할때는 대략 좋지 않다.

  TClass1 = class
  private
    FField1: string;
    FField2: string;
  end;

  TClass2 = class
  public
    procedure Test;
  end;

procedure TClass2.Test;
var
  Class1: TClass1;
begin
  Class1 := TClass1.Create;

  ShowMessage( Class1.FField1 );
  ShowMessage( Class1.FField2 );

  Class1.Free;
end;


TClass1과 TClass2가 같은 Unit에 있다면 위의 소스는 컴파일이 성공한다.

문제는 두 Class가 서로 다른 Unit에 있다면 E2261 Cannot access private symbol 에러가 발생한다.

Class를 분리하거나 하면 웃기게 된다.


확실한 구분을 위해 private앞에 strict를 추가해보자.

  TClass1 = class
  strict private
    FField1: string;
    FField2: string;
  end;


컴파일해보면

E2261 Cannot access private symbol TClass1.FField1
E2261 Cannot access private symbol TClass1.FField2

에러가 발생한다.


명확한 OOP를 위해서 확실하게 strict 를 지정해주자.

추가된 문법은 팍팍 이용해 주자~

+ Recent posts