2024-06-21
This commit is contained in:
103
Writerside/topics/OOP.md
Normal file
103
Writerside/topics/OOP.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# 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";
|
||||
```
|
||||
Reference in New Issue
Block a user