# OOP PERL의 클래스는 package입니다. 객체는 참조가, 메서드는 서브루틴입니다. ```perl package Person; use warnings; use strict; # 생성자 sub new { my ($class, $args) = @_; my $self = bless { name => $args->{name}, age => $args->{age} }, $class; # bless()는 객체에 대한 참조를 반환합니다. } sub get_name { my $self = shift; return $self->{name}; } sub set_name { my ($self, $name) = @_; $self->{name} = $name; } sub get_age{ my $self = shift; return $self->{age}; } sub set_age{ my ($self, $age) = @_; $self->{age} = $age; } sub to_string { my $self = shift; return "($self->{name}, $self->{age})"; } sub DESTROY { # 파괴자 ... } 1; # 클래스 정의의 맨 끝에서 true를 반환해줘야 합니다. ``` ```perl package Employee; # Person 클래스를 상속할 겁니다. use warnings; use strict; use lib '/home/elex/Workspace/perl-examples'; use Person; our @ISA = qw(Person); # Person을 상속. IS-A 관계 sub new { my ($class, $args) = @_; my $self = $class->SUPER::new( $_[1], $_[2] ); # 부모 생성자 호출 $self->{id} = $args->{id}; bless $self, $class; return $self; } sub get_id{ my $self = shift; return$self->{id}; } sub set_id{ my ($self, $id) = @_; $self->{id} = $id; } sub do_work{ return "working.."; } sub to_string { my $self = shift; return "($self->{name}, $self->{age}, $self->{id})"; } ``` ```perl #!/usr/bin/perl use warnings; use strict; use lib '/home/elex/Workspace/perl-examples'; use Person; # 객체 생성 my $charlie = Person->new({ name => 'Charlie', age => 14 }); # 메서드 호출 print $charlie->to_string()."\n"; ```