본문 바로가기
IT라이프

PHP 리팩토링(1)

by zairan 2015. 6. 4.

리팩토링 (1) 

고객측에서 리팩토링 의뢰가 들어왔다. 기존 누군가가 짜논 코드를 효율좋게 고치라는 미션이다. 본격적으로 시작하기 앞서 몇가지 필요하다고 생각하는 기법들을 찾아서 참고하려고 하려고 한다. 기법은 마틴 파울러의 리팩토링을 근간으로 하려고 한다.


1. 마법숫자를 상수로 전환


클래스 밖에서 사용할 때


define("LOCAL""1");

define("DEV""2");

define("REAL""3");


클래스 안에서 선언할 때


class MyClass {

const MIN_VALUE = 0.0; 

}



2. 절차코드를 객체로 전환

각 레코드타입을 읽기 / 쓰기 메소드만 있는 덤 데이터 객체로 변경

모든 절차코드를 하나의 클래스에 넣기

메소드를 static 로 . 싱글턴 활용


3. 메서드 추출 기법 사용

원리가 아닌 기능을 나타내는 이름으로 새 목적의 메서드를 만들자

기존 지역변수들은 새로 생성된 메서드에 매개변수로 던지자

임시변수는 새 메서드에서도 임시변수

임시변수 이름은 되도록 각 역할마다 다르게 이름을 주어서, 겹치지 않게 하자

변수대신 메서드를 바로 집어넣기도 하자

분리하기 전 기존 지역변수 처리가 중요하다.


function printWing($amount)

{

$this->printBanner();


echo "name" . $name;

echo "amount" . $amount;

}


===========>>>>>> 리팩토링 후


function printWing($amount)

{

$this->printBanner();

$this->printDetail();

}


function printDetail($amount)

{

echo "name" . $name;

echo "amount" . $amount;

}




4. 메서드 이동 적용

A 클래스에서 B 클래스로 메서드를 이동시키는 기법

원본 클래스의 하위클래스에서 오버라이딩이 없는게 좋다.

원본메서드를 위임메서드로 전환하자



5.  조건문 쪼개기

if ($date->before(START) || $date->after(END)) {

$charge = $quantity * $this->rate + $service_charge;

} else {

$charge = $quantity * $this->rate;

}


===========>>>>>> 리팩토링 후


if ($this->isBetween($date)) {

$charge = inService($quantity);

} else {

$charge = outService($quantity);

}


function inService($quantity

{

return $quantity * $this->rate + $service_charge;

}


function outService($quantity)

{

return $quantity * $this->rate;

}


function isBetween($date)

{

if ($date->before(START) || $date->after(END)) {

     return true;

} else { 

    return false;

}

}




 



반응형

'IT라이프' 카테고리의 다른 글

CocoaPods 설치 하기  (0) 2016.11.10
PHP 리팩토링(2)  (0) 2015.06.04
Laravel 5 루트 설정  (0) 2015.05.30
[PHP 보안] 2. 웹 어플리케이션 보안 (2)  (0) 2015.05.09
[PHP 보안] 2. 웹 어플리케이션 보안  (0) 2015.05.09

댓글