• Java Refactoring Replace Inheritance with Delegation

    A 클래스와 B 클래스가 있고 B 는 A 를 상속받는다면 B 는 A 의 기능을 바로 이용할 수있다. 이것은 상속(Inheritance)이다. 위임(Delegation)은 B 클래스가 A 클래스의 인스턴스를 가지고(위임 필드) B에서 A의 메서드를 호출하는 것이다. A 의 기능의 실행을 B 에게 위임하는 것이다. 상속은 상위클래스의 기능들중 불필요한 기능들까지 B 가 상속받을 수...


  • Java Refactoring Duplicate Observed Data

    소프트웨어에서 어떤 객체에서 일어나는 일들(관측 데이터)을 다른 객체에게 알려줘야 하는 상황들이 빈번하게 일어난다. 우리는 ArticleManager 가 Article 들을 전부 관리하도록 했습니다. ArticleManager 가 관리하고 있는 Article 들이 업데이트(변경)이 이루어질 때 print 를 해줘야 하는데 print 할 device 가 바쁘다면 ArticleManager 가 그저 print 를 호출하는건 옳바른 동작을 보장할 수 없을것이다....


  • Java Refactoring Replace Constructor with Factory Method

    일반적으로 클래스를 생성할 때 우리는 new Object() 를 이용하여 클래스를 생성한다. 이 때 Object 에는 생성할 클래스의 이름을 적어주게 되는데 이를 클래스명이 하드코딩 되어있다고 한다. 이 장에서 나올 내용은 앞에서 이미 많이 사용한 내용이다. 팩토리 메서드를 간단히 이야기하면 생성자(Constructor)를 팩토리 메서드(Factory method)로 추상화 한 것이다. 생성할 때 생성자를 호출하여 생성하는...


  • Java Refactoring Replace Error code with Exception

    소프트웨어는 에러(의도치 않은 상황)이 발생한다. 사실상 개발자의 제어하에 둘 수 없는 상황이 무조건적으로 생긴다. 그 상황에는 시스템의 파워가 내려가거나 하드웨어의 수명이 다하거나 또는 통신망의 문제 부터 응용소프트웨어의 경우는 돌아가는 Os 에서 다른 소프트웨어들로 인해 메모리가 부족하다거나 컴퓨팅 파워 부족으로 연산이 느려져 화면을 늦게 그리게 된다거나 하는등의 경우들이 에러 이다. 이것들은...


  • Java Refactoring Replace type code with state/strategy pattern

    이전 포스팅에서 분류 코드를 서브 클래스로 치환하는 방법 및 경우를 보았다. 우리가 일반적으로 아는 MVC 패턴도 stratergy 패턴의 내용이 포함된 패턴이다. 앞에서 이용한 Sub Class 로 치환을 다시 생각해보면 생성시 객체의 분류가 인스턴스로 결정되었다. 즉 AdArticle -> Article, MyArticle -> Article 은 가능하지만 AdArticle -> MyArticle 은 힘들다. 수평관계에 있는...