티스토리 뷰
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
- 웹개발
- 도커
- spring프레임워크
- springboot
- SEO최적화
- llm최적화
- Rag
- 배민
- AI솔루션
- Java
- 프롬프트엔지니어링
- restapi
- 해외
- 펄
- 비즈니스성장
- 직구
- 크로미움
- 데이터베이스
- 생산성향상
- 업무자동화
- 배민문방구
- 코드생성AI
- springai
- selenium
- 웹스크래핑
- 자바AI개발
- 오픈소스DB
- Oracle
- n8n
- 개발생산성
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |