티스토리 뷰

DEV/Perl

OOP

초록매실원액 2015. 12. 21. 15:24

OOP(Object-Oriented Programming)?

  • 객체 지향 프로그래밍

  • Perl에서는 Object-Oriented Perl이라고도

 

객제지향이란

  • 프로그램을 단순한 명령어와 함수라는 개념에서 벗어나 여러 개의 독립 단위를 생성, 객체들의 모임으로 프로그래밍 하는 기법

  • 각각의 객체들은 메시지를 주고 받을 있다며, 데이터를 유연하게 처리 있게 된다.

OOP장점

  • 유연하고 변경이 용이한 코딩

  • 대규모, 소규모 프로젝트에 많이 사용

  • 직관적인 코드 분석

  • 개발속도 향상

펄에서 OOP 사용하는가?

  • cpan 올라와 있는 module들은 OOP 많이 사용함


cpan (http://www.cpan.org)


OOP 기본 구성 요소

Object

데이터를 보관, 액세스, 변경, 보호하는 작업의 단위

Class

객체에서 액세스 있는 데이터가 무엇인지 어떻게 사용 있는지 기술(데이터 타입)

Method

데이터를 액세스, 수정, 처리하기 위한 수단

Inheritance

어떤 객체의 class 데이터와 method 추가하여 업그레이드 하는 방법

Polymorphism

같은 데이터에 대하여 서로 다른 객체가 클래스에 따라 다르게 반응하는 것을 의미


OOP특징

캡슐화(Encapsulation)

데이터와 Method(함수) 하나의 단위로 묶은 .(독립적으로 실행)

정보 은폐(Information Hiding)

외부에서 객체상태를 바꾸거나 허가되지 않은 동작으로부터 보호

추상화 or 개념화(Abstraction)

외부에서 사용해야 하는 기능은 공개, 제한해야 하는 기능은 은폐

다형성(Polymorphism)

같은 Method 대해 클래스에 따라 다른 행위를 하게 되는 특징

인스턴스(Instance)

추상화 개념 또는 클래스 객체, 템플릿 들이 실제로 구현된

메시지 전달(Massage passing)

객체가 보내는 데이터를 사용하는 과정에서 다른 객체를 요청

상속(Inheritance)

기존에 있던 클래스를 바탕으로 새로운 클래스를 만들 있음

 


요약

특징

설명

캡슐화

묶는다

정보 은폐

숨긴다

추상화

표현한다

상속

재사용한다

다형성

상황에 따라 달라진다

인스턴스

객체가 실체화 되어 메모리에 구현됨

오브젝트(객체)

독립성을 가진 부품

클래스

데이터 타입으로 취급



OOP Perl 규칙

  • Class package 구분

  • 서브루틴을 이용하여 Method 정의
  • 레퍼런트(레퍼런스가 대상) 블레스하여 객체를 생성
    1. 블레스 : 이름이 없는 레퍼런트에 이름(tag) 붙여주는 작업

    2. 데이터 : 레퍼런트, 주소 : 레퍼런스

    3. 저장소에 기능을 부가하는 기능


통장예제

Account.pm


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
Account;
 
use strict;
 
use
warnings;
 
 
 
sub new{
 
my ($class,$money= @_; #인자값으로 저장되어 있음 0요소 class, 1요소 money
 
my $self = { money => $money }; #무명해쉬
생성        
 
 
 
bless $self$class# 무명해쉬 이름(tag)붙임
 
 
 
return $self#결과봔한
 
}
 
 
 
 
 
sub
get_money{ #조회
 
my ($self= @_; #객체 불러오기
 
return $self->{money}; #해당 키에 대한 값 반환
 
}
 
sub
deposit(){ #입금
 
my ( $self$money= @_  ; #객체
불러오기
 
$self->{money} += $money;
 
}
 
sub
withdraw(){ #출금
 
my ( $self$money= @_  ; #객체
불러오기
 
$self->{money} -= $money;   
 
}
 
sub
transfer(){ #이체
 
my ( $self$money , $taget= @_ 
#객체 불러오기
 
$self->withdraw($money);
 
$taget->deposit($money);
 
}
cs

bank.pl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use strict;
 
use
warnings;
 
use Account;
 
 
 
my $account
= Account->new(1000); #직접호출
 
#my $account
= new Account(1000); #간접호출
 
#my #account
= Account::new('Account',1000);
 
 
 
 
 
foreach(1..100){
 
$account->deposit($_);
 
}
 
print
$account->get_money();
 
 
 
foreach(1..100){
 
$account->withdraw($_);
 
}
 
print
$account->get_money();
cs


'DEV > Perl' 카테고리의 다른 글

CPAN  (0) 2015.12.24
FILE  (0) 2015.12.23
정규표현식(Regular Expression)  (0) 2015.12.14
Package  (0) 2015.12.11
Subroutine (=함수)  (0) 2015.12.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함