작성자 : 주정섭  (jjsverylong)

원문 : http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_tutorial&no=98


____________________________________________________________________________________________
원래 이 글은 예전에 작성한 것이지만, 볼랜드 포럼의 델파이 강좌란이 너무 심심(?)한 것 같아서 재편집해 올립니다. 개발자 게시판이란 좋은 강좌와 팁이 많아야 하는데, 최근의 여러 델파이 관련 사이트를 보면, 대부분 자유게시판과 질답 게시판에만 글이 올라 오고,  다른 게시판은 거의 죽어 있는 것같아 무지 안타깝습니다.

좋은 강좌와 팁이 델파이 관련 사이트에 넘치기를 바라면서....
___________________________________________________________________________________________

다음 코드는 어떤 버튼의 클릭이벤트이다. 클릭할 때마다 버튼의 Caption 속성을 '하하'와 '호호'로 토글하는 코드다. 이 버튼의 Name 속성을 Button1이라고 하자.

[원본 클릭 이벤트]

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Button1.Caption = '하하' then
    Button1.Caption := '호호'
  else
    Button1.Caption := '하하'
end;

코드는 매우 간단하므로 이해하는데 별로 어려움이 없을 것이다. 이 정도의 간단한 코드에 무슨 리팩토링이 필요할 것인가라고 생각할지 모르나, 사실은 그렇지 않다. 여기서 논하는 리팩토링은 마틴 파울러의 리팩토링 책 내용과는 다소 다른 내용이다. 이 리팩토링은 델파이라는 특수한 개발 환경에 의존적이기 때문이다. 어쨋든 여러분은 이 간단한 코드에도 리팩토링이 가능함을 알 수 있을 것이다. 문제는 이 간단한 리팩토링 마저도 상당수의 델파이 개발자들이 하지 않는다는 것이다.

[리팩토링 1단계]

가급적 상수(constant)들은 코드내에서 들어내서 별도로 두라.

procedure TForm1.Button1Click(Sender: TObject);
const
  s1 = '하하';
  s2 = '호호';
begin
  if Button1.Caption = s1 then
    Button1.Caption := s2
  else
    Button1.Caption := s1;
end;

[리팩토링 2단계]

이벤트 메서드 내에서 가급적이면 콤포넌트 Name을 직접 참조하지 말라. 콤포넌트명을 직접 참조하면 후일 그 콤포넌트 Name 속성을 바꿨을 때, 그 콤퍼넌트를 참조하는 코드도 같이 수정해야만 하기 때문이다.

procedure TForm1.Button1Click(Sender: TObject);
const
  s1 = '하하';
  s2 = '호호';
begin
  if TButton(Sender).Caption = s1 then
    TButton(Sender).Caption := s2
  else
    TButton(Sender).Caption := s1;
end;

[리팩토링 3단계]

방어적인 운전이 있듯이 방어적인 코딩도 있다. 에러에 미리 대처하는 코딩을 말한다. 이 이벤트가 실수로 버튼이 아닌 다른 콤포넌트의 클릭 이벤트에 연결되면 참으로 큰일 날 것이다. 다음은 이에 대한 대처 방법이다.

procedure TForm1.Button1Click(Sender: TObject);
const
  s1 = '하하';
  s2 = '호호';
begin
  Assert(Sender is TButton, '버튼에만 연결할 수 있는 이벤트다. 조졌다 니는 잘못 연결했다.');

  if TButton(Sender).Caption = s1 then
    TButton(Sender).Caption := s2
  else
    TButton(Sender).Caption := s1;
end;

Posted by 나비:D
:
BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total :
Today : Yesterday :