더이상 사용을 하지 않아 Deprecated시킨 클래스, 메소들을 여러가지 이유로 검출하거나 검출후 제거하고 싶을때
Deprecated된 곳을 일일이 찾아내기가 쉽지 않다. 
컴파일 옵션을 약간 변경하여 Deprecated를 참조하거나 호출하는 곳을 에러로 표시하도록 하면 검출이 쉽지 않을까.

오류가 없는 코드이지만 166라인은 deprecate되어있다


166 Line의 메소드는 Deprecated된 메소드로 대체로 지정된 메소드를 사용해야한다. 
물론 IDE의 설정값에 따라서 이미 Warning 표시가 뜰수도 있다.

putNewMember의 선언을 보면 deprecated되어있다.


해당 프로젝트의 Properties > Java Compiler > Error/Warnings 의 값을 변경해준다. 

기본 상태


기본으로 Error를 발생시키지 않지만, Deprecated API를 Error로 표시하도록 변경한다.

설정 변경


설정을 변경하고 저장하면, 프로젝트를 다시 Build하게 된다. Build이후엔 Deprecated를 사용하는 곳에는 모두 Error가 표시되게 된다. 

deprecated를 사용한 Line에서 오류 발생


Problems Perspective를 보게 되면 한결 편하게 Deprecated된곳의 사용을 쉽게 찾아낼수 있다.

Problems Perspective







저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 영겁회귀
A. 위의 각 선언에서, 하나의 새로운 객체로 묶을 만함 매개변수 군이 있는가?
public void paintComponent(Graphics g, 
Component c, Container p, int x, int y, int w, int h, boolean shouldValidate)
-> int x, int y, int w, int h -> x, y, w, h 좌표의 정보를 가지고 있는 새로운 객체
public void setRangeProperties(int newValue, int newExtent, int newMin, int newMax,
boolean adjusting)
-> 글쎄.. ->int newValue, int newExtent -> 별도의 Range로 묶을만 하다.
public static int showConfirmDialog(Component parentComponent, 
Object message, String title, int optionType, int messageType, Icon icon)
-> 글쎄.. -> 뭐 없는 듯함.
public abstract boolean drawImage(Image img, 
int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, 
Color bgcolor, ImageObserver observer)
-> int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2
  각 x, y값을의 변화를 짝지어서 .
B. 위의 시그너처들에는 매개변수가 왜 그렇게 많을까?
매개변수가 많은 것은 클래스를 좀더 일반적으로 만들고자 하는 의도의 영향으로 보인다.
즉 이 클래스가 다루는 모든 것을 전달하려고 하다 보니 매개변수가 많아진 것 같다. 
그래픽 같은 것들은 상태가 없는 경우가 많으므로, 매개변수를 여러 개 사용하는 것도 도움이 된다.
C. JTable 선언(이 장의 앞에 있는 연습문제 5)을 다시 살펴보자. 여기에서 어떤 매개변수 군이 보이는가?
Dimension, KeyStroke 등 여러가지 정보를 가진 객체가 매개변수로 넘어 가는 듯하다.
-> 행과 열이 많다. 일종의 locator를 사용하면 이 객체가 더 간단해 지지 않을까 싶다.
     그렇게 하면 선택이 간단해지고, 두 행에 걸친 셀과 같은 문제에 대처 할 수 있을 것이다. 

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 영겁회귀
1. 징후
    메서드에 매개변수가 한두 개 보다 많다.

2. 원인
    객체 간의 결합도(Coupling)를 최소화 하려고 했을 가능성이 있다.
    그래서 호출된 객체가 클래스 간의 관계를 알게 하는 대신에, 호출자가 모든 것을
    찾게 했을 것이다. 이렇게 되면 메서드를 매개변수들을 이용해서 호출자가 의뢰한
    작업에 집중하게 된다.

    혹은 프로그래머가 여러가지 변이형을 처리하기 위해 루틴을 일반화하면서
    범용 알고리즘과 수많은 제어(Control) 매개변수를 만들었을 수도 있다.

3. TODO
    A) 이미 알고 있는 다른 객체로부터 해당 매개변수 값을 얻을 수 있다면
        Replace Parameter with Method를 이용한다.
    B) 해당 매개변수들이 하나의 객체로부터 넘어온다면, Preserve Whole Object를 
       시도한다.
    C) 매개변수 데이타가 하나의 논리적 객체로부터 얻어지는 것이 아니라면,
       Introduce Parameter Object를 이용하여 이들을 그룹으로 한다.

4. 효과
    의사소통 증진, 중복을 노출 시킬수 있음, 크기가 작아지는 경우가 많다.

5. 금기
    A) 간혹 두 클래스 간의 의존 관계가 없도록 하는 것이 좋을 때가 있다.
        예) 호출자가 의존 관계를 가질 수 있지만, 이를 넓게 퍼뜨리지 않아야 할 때가 있다.
          변경시에 이런 균형을 망치지 않도록 해야한다.
    B) 때때로 매개변수들을 의미 있는 그룹으로 묶을 수 없는 경우가 있다. 그렇다면 묶지 않는 것이 좋다.
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 영겁회귀

티스토리 툴바