Slide 1: 객체지향 펄 (Object-Oriented Perl)
* 원문 : Anton Berezin (
tobez@tobez.org)
* 번역 : 장범수 (
pung96@gmail.com)
Slide 2: 객체지향 프로그래밍 (Object-oriented programming)
데이터에 작용하는 메소드들에 의해 결합된 데이터를 위한 언어 메커니즘
메소드 호출은 때때로 "객체에 메시지를 보내는것"으로 표현된다
Slide 3: 고전적인 OOP 펄 (Classic OOP Perl)
펄의 객체를 위해 데이터를 어딘가 저장하고
메소드와 데이터를 결합할 필요가 있다.
Slide 4: 레퍼런스 (References)
이미 펄은 임의의 데이터 구조를 위해 레퍼런스를 가지고 있다.
%PERL%
my $hashref = {
a => 1,
b => 2,
};
%ENDPERL%
코드 레퍼런스 (Code references)
이미 펄은 임의의 데이터 구조를 위해 레퍼런스를 가지고 있다.
함수를 위한 레퍼런스를 포함해서
sub x { return 42; }
my $funcref = \&x;
print $funcref->();
손으로 만든 객체 (Objects by hand)
따라서 빈약하지만 다음처럼 객체를 만들 수 있다.
sub method1 {
my ($obj) = @_;
print "Attr1 is $obj->{attr1}\n";
}
sub method2 { ... }
my $obj = {
attr1 => 1,
attr2 => 2,
method1 => \&method1,
method2 => \&method2,
};
$obj->{method1}->();
Slide 5: 손으로 만든 객체(Objects by hand)
이것은
흉하다
(비록 이것이 OO 언어에 꼭 필요하지 않은 장점을 가지고 있지만)??
원한다면 C언어로도 이런 객체를 만들수 있다.
(맞다, 그렇게 하는 것으로 알려져 있고)
(나 역시 그렇게 했었다.)
Slide 6: 언어의 구문상의 도움 (Syntactic help from the language)
메소드를 호출하기 위한 특별한 구문이 필요하다
Slide 7: 하지만 많아서는 안된다(But not much)
하지만 메소호출 구문이 필요하지만, 아주 조금만 원한다.
Slide 8: 객체의 표현(Object representation)
펄의 "진짜" 객체는 여전히 레퍼런스다.
레퍼런스가 무엇을 참조하든 대부분 객체로 만들수 있다.
해쉬 레퍼런스 (hash ref)
배열 레퍼런스 (array ref)
스칼라 레퍼런스 (scalar ref)
함수 레퍼런스 (function ref) (쓸모가 많다.: yeah, this can be useful)
파일핸들(glob) 레퍼런스 filehandle (glob) ref
Slide 9: 어떻게 클래스와 객체를 연결하는가 How to associate an object with a class
펄에는 네임스페이스(패키지)가 있다. Perl has namespaces (packages)
보통은 모듈을 만드는데 쓰이지만, That's what normally used to create modules
클래스를 만드는 일도 할수 있다. But it can work for classes, too.
Slide 10: 레퍼런스 블레싱 Blessing a reference
특별한 내부명령어
bless Special builtin called
bless
bless $reference, Classname;
$reference is any reference.
Classname is any package name.
결과는 블레스된 레퍼런스, 객체다.
The result is a blessed reference; an object.
Topic revision: r2 - 11 Jun 2008 - 11:08:01 -
BeomsuChang