마틴 파울러, Martin Fowler 의 [Refactoring]

 > 리팩터링 바이블 내지는 고전으로 여겨지는 Refactoring 이라는 책의 저자이다.
마틴 파울러가 정의하는 많은 표현들이 현재까지도 사용되고 있으며 한글번역판도 나와있으며
난 아직 안봤지만 매우 좋은 책이다. -_-?

GoF, The Gang of Four

 > 마틴 파일러의 [Refactoring]이 리팩터링의 바이블이라면 디자인 패턴은 GoF 가 바로 그렇다.
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 이 네명이 한 건축가가 건축물을 만드는데에 대해서 몇가지 패턴을 설명한 글을 토대로 객체지향개발에 적용하여
몇가지 패턴을 만들어 냈습니다. 그들을 기리는 말로 The Gang of Four 라고 합니다.
흔히 "GoF 의 디자인패턴인 무엇무엇" 이라고 표현합니다.

진흙 구덩이의 공, Big Ball of Mud

 > "고장나지 않는 것은 고치지 않는다." 라는 관행 때문에 그때 그때 발생하는 버그와 수정만 처리해버리고 말아버리기 때문에 시간이 갈수록 수정작업은 걷잡을 수 없이 커지며
그에 드는 시간은 기하급수적으로 커지며 돌이킬 수 없는 지경까지 이르는것을
진흙 구덩이의 공 즉, Big Ball of Mud 라고 표현한다.
Brian Foote 와 Joseph Yoder 에 의해 만들어진 표현이다.

캡슐화, Encapsulation, Encapsulate

 > 클래스가 자신의 역할을 외부에 영향을 받지 않도록 설계하는 것을 말한다.
예를 들면 XMLLoader 라는 클래스를 만들면 xml 을 로드하기 위해서 코드에서는 URLLoader 라던지 IOError 같은 것을 신경쓰지 않도록 만들어야 한다는 이야기다.
예를 들어
var loader:XMLLoader = new XMLLoader();
loader.addEvent(XMLLoaderEvent.COMPLETE, xmlLoadComplete);
loader.load("sample.xml");
와 같이 로드하라는 명령을 내리고 그 응답만 기다린후에 사용하면 되는것이다.
이렇게 자신이 하는 일을 클래스 내부로 숨겨서 밖에서 알지 못하고 영향을 받지 않도록 하는 것을 캡슐화, Encapsulation 이라고 한다.

추상, Abstract

 > 이 키워드 역시 플래시에서 많이 생소한 단어다.
플래시는 추상클래스나 추상메소드를 지원하지 않기 때문에
추상클래스를 사용하려면 "마치 추상클래스인것 처럼" 사용하는 수 밖에 없다.
때문에 그 활용도 때문에 비슷하게 구현하여 사용하긴 하지만
추상이라는 의미는 "실제적인 구현"이 아닌 "어떤 역할을 할것이다." 라고 정의해주는 역할을 말한다.
예를 들어 Sonata, Avante, Tico 라는 클래스가 있다고 하면
Car 라는 추상클래스를 만들어 accelate(), break(), openTrunk() 같은 기본적인 메소드를 만들어 놓을 수 있는 것이다.
왜 "추상"이라는 단어를 붙이냐면
추상클래스의 메소드를 추상메소드라고 하는데
추상메소드는 상속하여 구현하지 않고는 동작할 수 없기 때문이다.
왜냐면 "어떤 역할을 할것인지 정의만" 내려주지 실제로 어떻게 동작할지에 대한것은 코드에 포함되어 있지 않다.
코드상으로는
abstract class Car...
라고 하며 추상메소드는
abstract function accelate():void
라고 한다.

클라이언트, Client

 > 물론 고객을 뜻하기도 하지만 리팩터링이나 디자인 패턴에서는
주(主)가 되는 코드와 그 코드를 구성하는 객(客)으로 그 역할이 나뉜다.
이는 절대적인 관계가 아니라 상대적인 개념이며
아래 예를 통해서 살펴보자.

class Uploader extends Sprite...
public function upload():void
{
    this.uploader = new FileUploader();
    this.uploader.file = this.data;
    this.uploader.upload()
}

class FileUploader...
public function upload():void
{
    private var reference:FileReference;
    public function upload():void
    {
        this.reference.load(this.request);
    }
}

Uploader 는 upload 라는 메소드를 통해서 FileUploader 클래스의 upload() 를 실행시키고
FileUploader 내부에서는 FileReference 를 이용하여 업로드를 한다.

여기서 FileUploader 의 입장에서는 자신이 FileReference 를 참조하든 Loader 를 참조하든
Uploader 클래스에게 알리거나 연관될 필요가 없다.
때문에 FileUploader 에게 Clinet 는 Uploader 가 된다.
반대로 FileReference 입장에서는 FileUploader 가 클라이언트가 된다.

이런 주와 객의 입장을 설명할때 클라이언트 코드, 또는 클라이언트라고 표현한다.

짝 프로그래밍, pair-Programming

 > 두명의 개발자가 하나의 코드 또는 클래스를 더 나아가 소프트웨어를 만드는 것을 말한다.
이 용어가 중요한 것은 짝 프로그래밍을 하려면 디자인패턴에 대한 용어정의와
서비스 지향적인 개발방법이 명확하게 정의되어 있어야하며
서로간의 개발 수준이 비슷해야하고 고도의 협업력이 필요하기 때문이다.
즉, 무지 수준높은 프로그래밍이라는 이야기다^^

코드속의 나쁜 냄새, Bad Smells in Code

 > 마틴 파울러는 좋지 못한 설계나 수정에 대한 어려움이 예상되는 몇가지 징후들(냄새표)을 일컬어
코드속의 나쁜 냄새 즉, Bad Smells in Code 라고 표현하였다.
이 냄새표는 나중에 따로 다루도록 하겠다.

+ Recent posts