티스토리 뷰
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를 정의
- 레퍼런트(레퍼런스가 될 대상)를 블레스하여 객체를 생성
블레스 : 이름이 없는 레퍼런트에 이름(tag)를 붙여주는 작업
데이터 : 레퍼런트, 주소 : 레퍼런스
저장소에 기능을 부가하는 기능
통장예제
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
- 조회
- 해외
- phython
- 데스트톱
- 여행
- 직구
- 오피스
- 무료
- 직링
- 할인
- 인텔리 제이
- 펄
- 수리영역
- 지니어스
- 배민문방구
- 정답
- 시즌2
- 베네수엘라
- 바다
- Java
- 배달의민족
- font
- 배민
- 오라클
- 개발폰트
- 유휴시간
- Oracle
- 쿠폰
- 신혼
- 삼슉이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |