
조슈아 케이에브스키 저, 윤성준/조상민 역, 인사이트 출판
1. 접근 계기
2. 리팩토링이란?
3. 왜 이책인가.
4. 널오브젝트
외부에서 들어온 코드를 다듬을 필요가 있었다.
코드를 받았을 때, 대박이었다. 도저히 확장이 불가능한 코드였다. 마음같아선 다시 만들고 싶었지만, 일정에 대한 고민 때문에 쉽사리 결정 할 수 없었다.
그 때 기억속에 희미하게 다가온 것은 리팩토링이었다.
리팩토링이 무엇인가에 대한 이야기를 잠깐 하겠다.
리팩토링은 코드를 재생산한다는 의미로 기존코드의 생산성을 높게 만드는 일이다.
리팩토링에 대한 이해가 없는 사람이 보았을 땐, 일을 하기 위한 일로 보일 수 있다. 왜 리팩토링이 필요한지 설명하기엔 어려운 부분이 많다. 개발일정에 리팩토링이란 기간은 산출되지 않으며, 리팩토링은 개발기간에 완료되어야 한다고 생각한다.
그렇다면 어떻게 해야하는가?!
간결하게 말하면, 리팩토링을 안하면 된다. 프로젝트에 사용된 코드는 한번 사용하고 버리면 된다는 말이다.
내가 관리자라면 추천하지만, 강요하지 않는다. 이유는 간단하다. 리팩토링을 하지 않으면, 본인 스스로가 괴롭기 때문이다.
무슨말인지 직접적으로 다가오지 않는가? 대한민국 사람이라면 누구나 배운 ' 산 수 ' 로 예를 들어보겠다.
[ 1 + 2 + 3 + 4 + 5 + 6 + 10 + 20 + 30 + 40 * 3 + 2 + 1 + 3x = ] 은 무엇일까? 왜 이걸 물을까?
저 산술식이 당신이 짜 놓은 코드와 별반 다를게 없다.
[ 81 + 120 + 6 + 3x = ], -> [ 207 + 3x = ] 이렇게 간단하게 해 놓으면 얼마나 보기 좋은가?
이게 바로 리팩토링이다.
영어라서 생소할 뿐이다. 위 처럼 재생산하는 방식을 [ 덧셈 제거 패턴 ] 이라 명명했다 치자.
영어로 하면 [ Plus Remove Pattern ] 뭐 이런 이름이 되지 않을까? 아무것도 아닌데.. 괜히 영어라 부담된다.
이게 우리나라 리팩토링과 기술에 관한 일반적인 접근 오류다.
여기까지 리팩토링이 무엇인지 잠깐 이야기 해 보았다.
리팩토링에 대한 책을 본지도 오래되어 되새김을 하기 위해 책 몇권을 빌렸다. ( 아마 4권 빌린거 같다. )
그중에서 내 손에 남은 것은 단 한권, 조슈아 케리에브스키가 쓴 [ 패터을 활용한 리팩토링 ] 이다.
다른 책에 눈에 들어오지 않는 건, 이전에 코드에 집중한 리팩토링을 많이 들어왔고, 이미 익숙해져버린 탓이라 생각한다.
이책은 소프트웨어 구조 관점에서 접근 했다. 일반적 코드 스타일의 오류나 패턴을 잘못 활용하는 부분에 대한 지적도 있었다. 여기에서 내가 생각했었던 패턴 남용에 대해서도 언급되어 자신감이 붙은 부분도 있고, 내가 오류를 범하고 있음 느끼기도 해주는 좋은 가이드라 생각한다.
나는 이 책을 볼 때, 차례로 보지 않았다.
책의 하드케이스 부분, 앞 부분은 리팩토링 목록 / 방향, 뒷 부분에는 코드 냄새 / 학습 순서가 있다.
나는 뒷 부분의 코드 냄새와 학습 순서를 기준으로 책장을 넘겼다.
절반정도 본 상태다. 현재까지 본 내용 중, 나의 뇌리에 강한 충격을 준 부분은 Null Object 패턴이었다.
Null Object를 한마디로 설명할 수 있다.
[ Null 체크 없이, 소프트웨어를 안전성을 보장한다. ]
완성도를 높이기 위해 예외처리를 많이 해본 사람이라면, 이게 얼마나 대단한 것인지 느낄 수 있을 것이다.
이 것을 제대로 이해하고 사용하려면 OOP 인터페이스에 대한 이해가 깊어야 한다는 단점이 있다.
그러나, 그 단점을 딛고 일어선다면, 남들 코드 1000줄로 구현한 내용을 약 500줄로 줄일 수 있게 된다.
코드 줄수에 대한 내용은 추측이 아니다. 패턴을 활용한 프로그래밍으로 3만줄이 나 되는 코드를 1만줄 이하로 구현한 경험이 있기 때문에 당당하게 말한다.
그러나 주의해야 할 것이 있다. 패턴 남용에 대해 잠깐 이야기 하겠다.
패턴은 추천 사항이지 필수가 아니다. 간단한 예를 들겠다.
[ if else ] 의 단 두가지의 분기문에 대해 Strategy 를 사용할 필요는 없다는 것이다.
고작 2줄에서 10줄이면 끝날 내용을 패턴 남용으로 프로그램의 복잡도를 높일 필욘 없다는 것이다.
본래의 내용으로 돌아와 Null Object의 사용법에 대한 이야기다.
우리는 일반적으로 널체크를 하고 안전하게 사용한다.
if( null == pGeneralObj ) pGeneralObj->Method();
널체크 없이 그냥 사용해도 소프트웨어의 안정성은 보장된다.
pNullObj->Method();
어떻게 이것이 가능할까?
이렇게 구현하면 된다.
class IMethod {
public:
void Method() = 0;
};
class NullObj : public IMethod()
{
public :
void Method() {}
};
class RealObj : public IMethod()
{
public:
void Method() { cout << "oops! real object?"; }
};
어느 정도 힌트를 얻었을거라 생각한다.
우리는 오브젝트를 초기화할때, pObj = null; 와 같은 코드를 많이 사용한다.
만약, pObj = NullObj::GetInstace(); 를 사용하면 코드의 안정성과 개발 생산성의 가속을 얻게 된다.
한가지 주의 할 점이 있다.
Null Object도 마찬가지로 추천사항이지, 필수 사항이 아니다.
널체크 두 세번만 사용하는 부분이나 객체 수가 현저히 적은 부분에 사용할 필요는 없다.
책을 좀 더 보다가, 잼있는 내용이 있으면 더 덧붙일까 한다. ^-^ !
void Method() = 0;
};
class NullObj : public IMethod()
{
public :
void Method() {}
};
class RealObj : public IMethod()
{
public:
void Method() { cout << "oops! real object?"; }
};
어느 정도 힌트를 얻었을거라 생각한다.
우리는 오브젝트를 초기화할때, pObj = null; 와 같은 코드를 많이 사용한다.
만약, pObj = NullObj::GetInstace(); 를 사용하면 코드의 안정성과 개발 생산성의 가속을 얻게 된다.
한가지 주의 할 점이 있다.
Null Object도 마찬가지로 추천사항이지, 필수 사항이 아니다.
널체크 두 세번만 사용하는 부분이나 객체 수가 현저히 적은 부분에 사용할 필요는 없다.
책을 좀 더 보다가, 잼있는 내용이 있으면 더 덧붙일까 한다. ^-^ !
'책 > 독서후정리' 카테고리의 다른 글
[책] 보험지식이 미래의 부를 결정한다. (0) | 2012.04.09 |
---|---|
[책] 알기 쉽게 풀어쓴 '명쾌한 논어' 21세기에 답하다. (0) | 2012.03.22 |
[책] 회사어로 말하라. (0) | 2012.03.12 |
[책] 손자병법 (0) | 2012.03.12 |
[책] 왜 세계의 절반은 굶주리는가 ? (0) | 2012.02.29 |