블로그 이미지
JEEN

서울에 사는 꽃청년의 IT찌질모험기

Rss feed Tistory
IT/Perl 2008.06.02 21:16

[ Perl ] Perl 로 OOP 하지 않겠나(요)? - Moose #1-2

사용자 삽입 이미지

  우선 앞에서 잠깐 맛보기로 봤던 Moose 코드에 대해서 가볍게 집고 넘어가보도록 합니다.  아마 이런 코드 였죠.

package Whitecat;
use Moose;

has name => (is => 'ro');
has age  => (is => 'ro');

1;

 여기에서 has 에 대해서 알아보겠습니다.

 has name => (is => 'ro');

 이것은 name 이라는 속성을 Whitecat 이라는 클래스에 정의하는 것입니다. 기본 형태는
has $name => %options;

 입니다. $name 에는 스칼라값이, %options 에는 해쉬값이 들어가게 됩니다. $name 에는 일반적인 Perl 변수정의 형태를 따르게됩니다. 그럼 %options 의 내용에는 뭐가 들어가게 되느냐에 대해서 가볍게 알아보겠습니다.
has name => (is => '[blah]');
 
 [blah] 에는 ro 나 rw 가 들어갑니다. 뜻은 딱 보나마나 겠죠. readonly 와, read-write 입니다. name 이라는 속성은 이런 속성값을 가지게 됩니다. 만약 ro 인데 값을 바꾸면 어떻게 될까요?

package Whitecat;
use Moose;

has name => (is => 'ro');
has age  => (is => 'ro');

1;

my $whitecat = Whitecat->new(
    name => 'Haak_Cat',
    age  => 30,
);

$whitecat->name("Blah_Cat");

 그래서 해봤습니다.
사용자 삽입 이미지
'Cannot assign a value to a read-only accessor at blahblah...' 라는 에러가 납니다. 절대로 readonly 인 속성값을 바꾸려고 하지 마세요. 한번 지정해 줬으면 그걸로 땡입니다.

 그리고 그 다음으로 해서는 안될 것...
has age  => (is => 'ro', isa => 'Int');

 age 의 형을 Int 로 정의해놓습니다. 그리고는
my $whitecat = Whitecat->new(
    name => 'Haak_Cat',
    age  => "Thirty",
);
  라고 넣어봅니다.

 그리고 이런 경우는 어떨까요?
my $whitecat = Whitecat->new(
    name => 'Haak_Cat',
    age  => "",
);

  당연히 에러가 나오겠죠? 그럼 어떤 에러냐...
사용자 삽입 이미지
'Attribute (age) does not pass the type constraint becaus: Validation failed for 'Int' failed with value [value] at blahblah...' 라고 뜹니다.

 당연히 속성값의 형태를 Int로 정해줬는데 'Thirty' 같은 문자열이 나오면 에러를 뿜어야되겠죠. 그리고 공백은 수치가 아니기 때문에 마찬가지로 에러가 나오게 됩니다.

 isa 로 정의할 수 있는 형태는 많습니다. Class 이름부터, Int, Str, HashRef, ArrayRef, ScalarRef, Object, Bool... 물론 이에 대해서 다 다뤄보지 않았기 때문에 조금조금 해나가보겠습니다. 성급한 성격의 소유자께서는 이에 대한 Moose Document 를 직접 보시면 되겠습니다.

 딱보면 해서는 안되는 짓 다음은...

has age  => (is => 'ro', isa => 'Int', required => 1);

라고 정의합니다. 그리고는
my $whitecat = Whitecat->new(
    name => 'Haak_Cat',
);
 
 age 속성을 정의해 주지 않았습니다. 그러면..
사용자 삽입 이미지

 'Attribute (age) is required at blahblah...' 라고 화를 냅니다.

required 는 이 속성이 필수요소 인가 아닌가를 정의합니다. 값은 0,1로 설정합니다.

 딱봐도 알만한 해서는 안되는 짓 세번째 였습니다.

 이상으로 문서를 읽지 않아도 대충 어떻게 될지 알 수 있는 , "Moose의 딱봐도 알만한 해서는 안되는 짓"이었습니다.
신고
, ,
TOTAL 464,289 TODAY 64

티스토리 툴바