지운's 개발일기
기술 경력 블로그
-
Java Refactoring Tease Apart Inheritance
상속은 더 적은 코드를 가지고 기존보다 많은 기능, 다양한 기능을 구현하는데 좋은 도구이다. 하지만 모든 코드를 계층 구조를 만들면 각각의 클래스는 실제 하는일이 없어진다던가 하여 하는 역할이 모호해질 수 있다. 그러면 아래와 같은 문제가 발생한다. 클래스 계층의 어디에 새 기능을 넣어야 할 지 알기 어려움 이용하고 싶은 코드가 (부모가 아닌)형제...
-
Java Refactoring Hide Delegation
앞에서는 Inheritance 를 Delegaation 으로 치환하는 것에 대해 알아보았다. 잘못된 IS-A 에서 HAS-A 관계로 변경은 어찌보면 당연하다. 하지만 무엇이든 과하면 안좋은 것으로 이러한 위임된 필드들로 인해 문제가 생길 수 있는데 우리가 앞에서 IS-A 를 HAS-A 로 변경할 수 있었던 이유가 무엇일까 생각해보면 우리는 Random 클래스가 해당 기능을 하는 객체이며 내부에서...
-
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)로 추상화 한 것이다. 생성할 때 생성자를 호출하여 생성하는...