블로그 이미지
JEEN

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

Rss feed Tistory
IT/Perl 2008.06.03 14:08

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

사용자 삽입 이미지

 요즘은 미국 쇠고기 사태로 세상이 시끄럽습니다. 그래서 예제도 이 현실에 맞춰서 해볼까 합니다.

package Cow;
use Moose;

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

sub cry {
  my $self = shift;
  warn "Umme~";
}

sub walk {
  my $self = shift;
  warn "ummmme~ I'm walking";
}

sub eat {
    my $self = shift;
    warn "umme~ I'm eating!";
}

 Cow 라는 놈을 만들어봤습니다. 나름대로 누렁이, 흰둥이라는 이름(name)을 가질 것이고, 몇 개월짜리 인지 나이(age)를 가지게 됩니다. 이름은 속일 수 있어도, 나이는 속여서는 안된다는 신념하에서 Int 형의 값을 받기를 원하고, 나이는 반드시 넣어줘야 하는 그런 소망을 넣어봤습니다.
 기본적으로 소는 울고(cry), 걷고(walk), 먹는(eat) 행동을 하게 됩니다.

 자, 그리고 위의 Cow를 상속받아서 MadCow 를 만듭니다.

package Madcow;
use Moose;

has 'feed' => (is => 'rw', isa => 'Str', default => 'Animal Feed' );

extends 'Cow';   # Moose 는 다중상속이 가능합니다.
                        # 그럴 때는 extends 'Cow', 'Dog', 'Chicken'; 같이 씁니다.

1;

 자.. 이렇게 만들었습니다.

my $mc = Madcow->new(
    name => 'Downer',
    age => 30,
);

 그리고 30 개월령, Downer씨를 만들어 냅니다.
$mc->cry;   # Umme~
$mc->walk;  # ummmme~ I'm walking
$mc->feed;
$mc->eat;    # umme~ I'm eating!

 Cow 의 모든 속성과 행동을 물려받은 MadCow, Downer 씨는 이렇게 평범한 삶을 살고 있었습니다. 울면(cry) Umme~ 하고 울고, 걸으면(walk) 계속 걸을 수 있었고, 먹으면(eat) 잘먹고 살고 있었다 이거죠.
 하지만 Downer 씨가 먹고 있던 것은 무엇이었을까요?
 
 has 'feed' => (is => 'rw', isa => 'Str', default => 'Animal Feed' );

 맙소사! 먹이('feed') 를 동물성 사료('Animal Feed') 를 먹고 있었던 것이죠. 이렇게 속성 값은 생성자 호출시에 정해줄 수도 있고, 기본값(default) 으로 정해줄 수도 있습니다.

 아무튼 이렇게 동물성 사료만 먹고, 별탈 없던 Downer 씨에게 어느날 PD 수첩이 와서 심층취재를 했습니다.

override 'cry' => sub {
    my $self = shift;
    if ($self->age >= 30 || $self->feed eq 'Animal Feed') {
        warn "BowWow";
    } else {
        super();
    }
};

 우선 PD 수첩 관계자는 Downer 씨가 우는 것에 대해서 진상규명을 했습니다. Downer 씨는 30개월령에다가, 이제껏 먹고 있던 먹이는 동물성 사료였다는 것이죠. 그리고 자기가 우는 소리도 모르고 있었습니다. "Umme~" 가 아니라 "BowWow" 하면서 짖고 있었던 것이었죠! 맙소사! 조금만 더 어리거나, Downer 씨 주인님께서 동물성 사료만 안먹였어도 이런일은 없었을 텐데 말이죠.
after 'walk' => sub {
    my $self = shift;
    if ($self->age >= 30 || $self->feed eq 'Animal Feed') {
        warn "BowWow! I'm down";
    } else {
        warn "Umme~ keep going!";
    }
};

 그리고 언젠가부터 걷고 나서는 계속 쓰러지고는 했습니다. "BowWow"라고 짖으면서 말이죠. 역시나 마찬가지로 조금 더 어렸거나, 동물성 사료만 안먹어도 이런 일은 없었을 텐데 말이죠!
 
 PD수첩 관계자들이 모두 떠나간 뒤로.. Downer 씨는 절망에 빠졌습니다. 내가 뭣땜에 이렇게 변했나 하구요.

before 'eat' => sub {
    my $self = shift;
    if ($self->feed eq 'Animal Feed') {
        warn "Oops.. What is this?";
    } else {
        warn "I washed my hands";
    }
};

 그리고 Downer 씨는 이제부터라도 주의를 기울이기 시작했습니다. 주인이 동물성 사료를 주고, Downer씨는 "이게 뭐냐"고 주인에게 따지기 시작했습니다. 하지만 먹을 수 밖에 없었죠. 이때마다 주인에 대한 불만은 쌓여만 갔습니다. "동물성 사료만 아니었어도..."라고 그는 항상 생각하는 듯 합니다.

...
...
후기..;; 결국 Downer 씨는 조용히 쓰러져 앉아있다가 생을 마감하려고 했는데, 주인은 그런 Downer 씨를 도축해서 <금싸라기 쇠고기 수입국> 한국으로 수출되는 배에 선적했습니다.

 전체코드입니다(Downer 씨가 도축되기 전)

{
package Cow;
use Moose;

has name => (is => 'ro');
has age  => (is => 'ro', isa => 'Int', required => 1); # 나이는 속일 수 없다!

sub cry {
  my $self = shift;
  warn "Umme~";
}

sub walk {
  my $self = shift;
  warn "ummmme~ I'm walking";
}

sub eat {
    my $self = shift;
    warn "I'm eating!";
}

}

{
package Madcow;
use Moose;

has 'feed' => (is => 'rw', isa => 'Str', default => "Animal Feed");
 # 기본적으로 동물성 사료를 제공하고 있지만, 먹이는 바꿀수 있습니다(is => 'rw')

extends 'Cow'; # Cow 를 상속

# 오버라이드
override 'cry' => sub {
    my $self = shift;
    if ($self->age >= 30 || $self->feed eq 'Animal Feed') {
        warn "BowWow";
    } else {
        super(); # Umme~
    }
};

# super() 를 호출한 뒤의 이벤트
after 'walk' => sub {
    my $self = shift;
    if ($self->age >= 30 || $self->feed eq 'Animal Feed') {
        warn "BowWow! I'm down";
    } else {
        warn "Umme~ keep going!";
    }
};

# super() 를 호출하기 전의 이벤트
before 'eat' => sub {
    my $self = shift;
    if ($self->feed eq 'Animal Feed') {
        warn "Oops.. What is this?";
    } else {
        warn "I washed my hands";
    }
};
}

1;

my $mc = Madcow->new(
    name => 'Downer',
    age => 30,
);

$mc->cry; #BowWow

$mc->walk; # BowWow! I'm down

$mc->eat; # Oops.. What is this?
                 # I'm eating

$mc->feed("Grasses");  # Grasses 를 사료로 제공

$mc->eat; # I washed my hands
                 # I'm eating

 Downer 씨, 고인의 명복을 빕니다. 또다른 Downer 씨가 사회에 나오지 않도록, 전세계 축산농가들은...

$mc->feed("Grasses");

 했으면 좋겠습니다.  (_ _)

 현실세태를 반영, Moose 를 이용한 "상속" 에 대해서 알아보았습니다.

 물론 여기에서 언급한 내용에 대한 사실 여부는 전 모르며, 이 내용은 팩션일지도 모릅니다. :-)
신고
이빨까기 2008.05.04 02:22

광우병과 광기속에서...

사용자 삽입 이미지

EBS 지식채널e 미친소


 요즘 광우병이 아주 열풍이다. 더불어 블로그 및 인터넷, 언론 매체에서 주요 떡밥이 광우병인 것은 당연한 것일 것이다. 보수진영에서는(달리 말하면 보수인지 아닌지 알 수 없는 미스테리 집단) "광우병 괴담"이라면서, 선동을 자제할 것을 촉구하고 있고, 다른 쪽에서는 광우병의 위험과 쇠고기 협상에서 보인 정부의 안일한 태도를 문제삼고 있다.

 솔직히 광우병의 위험이 어느 정도인지는 와닫지 않는다. PD수첩의 영상을 보면서 "직접적으로 와닫는 표현과 영상"들로 '아~ 이대로라면 내가 당하겠구나'라는 위기감을 느꼈었다. 하지만 그 뒤에 웹에서 떠도는 진위가 불분명한 글들이 더해져서 오히려 진실을 불투명하게 하는 듯한 느낌이 들었다.

 요즘은 언론정신(?)이 투철한 블로거분들도 많으셔서, 찌질한 연애기자들 가쉽거리같은 내용같이 정보에다가 소문을 첨가하고 카더라 카더라 덧붙인 게 어느 순간에 '우리 다 죽는다' 정도의 헐리우드 액션까지 가는 경우도 보곤 한다. 물론 그 심정은 알겠지만, 객관적인 정보에 주관적인 감정을 너무 주입한다면 그 객관적 정보가 희석되는 것에는 한숨을 내쉴 수 밖에 없다.

 하지만 다채로운 이야기들도 많다. 국내 축산업계에서도 동물성 사료 사용을 한다는 이야기라든가, 교차오염의 가능성이 있다라고 한다든가 하는 축산업계의 문제점도 지적한다거나 하는 내용들도 보이고 있다. 아쉽게도 이런 내용들은 감정적인 내용들에 의해서 그닥 수면위로 떠오르지 못하고, 보수인듯한 미스테리 집단들에게 반박자료로 사용되어질 수 있는 듯하지만...
사용자 삽입 이미지

사골곰탕이 돼지고기이던 쇠고기이던... 우려내면 이제는 뭔가 불안한...


 엊그제 3분 사골곰탕을 먹으면서도 맘 속에 뭔가 꺼려지는 불편함과, 오늘 장 보러 가서는 미국산 돼지고기의 단지 "미국산"이라는 글을 보고는 "중국산 만두" 이하로 생각하게 되는 그 무엇이 있었다. 거기에 조미료의 성분에서 쇠고기가 있는 지 여부 - 뉴질랜드 쇠고기라서 앗싸~ 라고 안심하는 이런 모습에 왜 "당연하고 당연해야할 것에 이렇게 신경을 쓰고 있는지" 조금 한심해졌다.

 다시 블로그와 뉴스들을 쭈욱 둘러보고 다시금 살펴보아도, 분명 나와 같은 생각이지만 어느 한 구석이 분명 불편하다. 이 정보가 진짜라고 받아들이고 맘 편하게 '2MB 꺼져' 라고 태연하게 까댔으면 좋겠지만, 진짜냐 가짜냐를 떠나서 너무 치우친다라는 느낌을 받았기에 오히려 정보의 신뢰를 의심하는 지경이니...

 하지만 분명한 것은, "줏대도 철학도 없는" 집권여당인 <걔네들당>과 그 당에서 나온 대통령이라는 2MB가 벌이는 일이라면 분명히 반대할 만하다 라는 것 - 아쉽게도 마치 파블로프의 멍멍이가 종소리만 들어도 배고픈 것처럼, 걔네들이 뭔가 하려고 하면 처음부터 삐딱하게 바라보게 되는 조건반사가 걸려버렸다.

 더불어 광우병이라는 천막에 덮힌 청와대 인사들의 부동산 비리의혹들은 이대로 수면아래로 아예 가라앉아 버리는 것은 아닐까 하는 두려움과, 광우병의 위기 만을 의식한 채 "쇠고기 협상" 과정에서 보여준 졸속 협상과 협상 실무자들에 대한 문책이 있는지 없는지 여부에 대해서 철저하게 수사, 아니.. 입에 오르내렸으면 좋겠다.

-----------------------
  광우병 관련해서 책이 있는 지 찾아봤다.

얼굴 없는 공포 광우병 그리고 숨겨진 치매 상세보기
콤 켈러허 지음 | 고려원북스 펴냄
알고 있어도 함부로 말할 수 없었던 사실을 한 과학자가 거침없이 써내려간 대단한 고발, 풀리지 않는 광우병 미스터리를 파헤친 충격 다큐멘터리! 새롭게 밝혀지는 광우병의 무서운 진실, 그리고 또 다른 의혹들을 탐정소설처럼 흥미롭게 엮은 연구보고서! 새롭게 밝혀지는 광우병의 무서운 진실, 음모, 의혹을 담은『얼굴 없는 공포, 광우병 그리고 숨겨진 치매』. 이 책은 과학자인 저자가 최근 8년간 광우병에 대해 추

  그리고 아마존...

신고

'이빨까기' 카테고리의 다른 글

좀 있으면 [어버이날]...  (2) 2008.05.05
광우병과 광기속에서...  (4) 2008.05.04
20/30대 책임론에 대해서 한마디...  (16) 2008.04.10
티벳 독립 만세!!  (0) 2008.03.20
TOTAL 462,384 TODAY 11

티스토리 툴바