먼저 private와 protected를 모르겠다면 OOP의 encapsulation에 관해 공부를... -_-a
Delphi의 Class는 멤버 접근에 독특한 특징이 있다.
private이나 protected로 지정이 되어있다고 하더라고 같은 유닛에 있는 클래스라면 접근이 가능하다.
사용할때는 편하지만 설계할때는 대략 좋지 않다.
TClass1과 TClass2가 같은 Unit에 있다면 위의 소스는 컴파일이 성공한다.
문제는 두 Class가 서로 다른 Unit에 있다면 E2261 Cannot access private symbol 에러가 발생한다.
Class를 분리하거나 하면 웃기게 된다.
확실한 구분을 위해 private앞에 strict를 추가해보자.
컴파일해보면
E2261 Cannot access private symbol TClass1.FField1
E2261 Cannot access private symbol TClass1.FField2
에러가 발생한다.
명확한 OOP를 위해서 확실하게 strict 를 지정해주자.
추가된 문법은 팍팍 이용해 주자~
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;
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;
strict private
FField1: string;
FField2: string;
end;
컴파일해보면
E2261 Cannot access private symbol TClass1.FField1
E2261 Cannot access private symbol TClass1.FField2
에러가 발생한다.
명확한 OOP를 위해서 확실하게 strict 를 지정해주자.
추가된 문법은 팍팍 이용해 주자~
'Programming > Delphi' 카테고리의 다른 글
Delphi - TOpenDialog쓰면서 FileExists로 왜 체크해요? (0) | 2010.03.14 |
---|---|
Delphi - TArray<T>의 Sort 및 BinarySearch (2) | 2010.02.22 |
Delphi - 클래스 내에 const 사용하기 (0) | 2010.01.27 |
Delphi - Generic중 유용한 TObjectList<T>에 ToArray를 추가해보자 (6) | 2010.01.21 |
[Delphi] Natural Order 문자열 정렬 (1) | 2009.08.14 |