Extract Superclass Refactoring  

 

�� ������ Extract Superclass ï¿½ï¿½ï¿½ï¿½ï¿½ä¸µ ������ ��ſ��� ��������  overview��  how �� �����丵�� IntelliJ IDEA���� ���� �� �ִ°��� �����մϴ�.

����


Extract Superclass  �����丵�� �� ���� �ɼ��� �����ϴ�.  Ã¹ ��° (Extract Superclass) �� ï¿½ï¿½ï¿½ï¿½ Ŭ������ �����ϴ� ����Ŭ������ �����ϱ� ���� ���˴ϴ�.


�� ��°(Rename original class and use superclass where possible  )�� ���� Ŭ������ �̸��� �����ϰ� ���Ӱ� ������ ����Ŭ������ ���� ������ �˴ϴ�. �׷� ���, �����ϸ� IDEA�� �׶� ����Ŭ������ ����ϱ� ���� ��� ���� Ŭ���� ����� �����մϴ� (�׸��� �װ��� ���� ���� ������ �װ͵��� �������� ���� ���Դϴ�).


������ Ŭ�������� �ʵ�� �޼ҵ�� ����Ŭ������ ������ �̵��� �� �ֽ��ϴ�.  ï¿½ï¿½ï¿½ï¿½ �޼ҵ带 ����, ����Ŭ�������� �߻������� ����� �޼ҵ带 �����ϰ� �ִ� ���� �̿ܿ� ���� �޼ҵ� ������ ������ �� �����ϴ�.  ï¿½ï¿½ ���, ����� ����Ŭ������ ������ Ŭ������ ����Ŭ�����κ��� ����ϰ� �� ���Դϴ�.

���� ���, �츮�� ���� Ŭ������ �����ϴ�:  

 
    public class OriginalClass extends JFrame implements Runnable, Scrollable {
         private int foo;
 
         public void method1(){
             //some code here...
         }
 
         private void method2() {
             //some code here...
         }
    }
 
Extract Superclass ï¿½ï¿½ �Բ� �����丵 ���Ŀ� ���ο� ����Ŭ������ ������ �� �Դϴ�:
 
    public abstract class SuperClass extends JFrame implements Runnable {
        public abstract void method1();
 
        protected void method2() {
            //some code here...
        }
    }
 

�׸��� ������ Ŭ������ ������ ���� ���� �� �Դϴ�.

 
    public class OriginalClass extends SuperClass implements Scrollable {
        private int foo;
 
        public void method1(){
            //some code here...
        }
    }

 

�׸��� ���� Rename original class and use superclass where possible  �����ϸ�, ��� �ڵ�� ������ �� �Դϴ�.
���ο� ����Ŭ����(���� Ŭ������ �̸��� ����):
 
public abstract class OriginalClass extends JFrame implements Runnable {
    public abstract void method1();
 
    private void method2() {
        //some code here...
    }
}

 

�׸��� �̸��� �ٲ� ���� Ŭ����

 
public class PreviousOriginalClass extends OriginalClass implements Scrollable {
 
         public void method1(){
             //some code here...
         }
}
 

����Ŭ������ ����Ǿ��ٸ� (���� Extract Superclass�� ���õǸ�), IDEA�� Ŭ������ ����� �˻��� ������ ���̰�, ����Ŭ������ ������� �׵��� �����ϸ� ��ü�� ���Դϴ�.  ï¿½ï¿½ï¿½ï¿½ï¿½ IDEA�� �� ������ �ڵ������� �����ϰ� �� �� �ְų�, � ����� �߰ߵǾ����� ��� ����ϰ� �ְ�, �׵��� ��ü�� �����մϴ�.

 

���� ��� ����� �߻����� publicMethod �� �Բ� ����Ŭ������ �����ϱ⸦ ���մϴ�.

    class OriginalClass {
        public void publicMethod() {//some code here}
        public void secretMethod() {//some code here}
 
    }
    ...
 
//This usage can be modified by changing the
//parameter type from 'OriginalClass' to 'SuperClass'
 
    void foo (OriginalClass myClass){
        myClass.publicMethod();
    }
    ...

  
//This usage will not be suggested for 
//refactoring because it calls the secretMethod
 
    void bar (OriginalClass myClass){
        myClass.secretMethod();
    }


��� �ڵ�� ������ ���� ���� ���Դϴ�:

 
    class OriginalClass extends SuperClass {
        public void publicMethod() {//some code here}
        public void secretMethod() {//some code here}
 
    }
    ...
 
    void foo (SuperClass myClass){
        myClass.publicMethod();
    }
 
     ...
 
    void bar (OriginalClass myClass){
        myClass.secretMethod();
    }

 

����Ŭ���� ����


����Ŭ������ �����ϱ� ���Ͽ�:

 1.   Project ���⿡�� Ŭ������ �����ϰų� ���� �����⿡�� Ŭ���� �� ��� ���� ij���� ��ġ�Ͻʽÿ�, �׸��� �˾� �޴��κ��� �Ǵ� Refactor �޴��κ��� Extract Superclass... �� Ŭ���Ͻʽÿ�.


����� ���� Ŭ������ Commander ��� ���� �ٸ� ���⿡�� ���� �� �ֽ��ϴ�.



 2.   ï¿½ï¿½ �Ŀ�, ���� ������� �����丵 �� ������ �����ϱ� ���� ��Ÿ�� ���Դϴ�:



ù ��°��, �� �ɼ� ( Extract Superclass  ï¿½Ç´ï¿½ Rename original class and use superclass where possible ) ��ư ���� �� ���� �����Ͻʽÿ�. �׸���  Superclass name  ï¿½Ç´ï¿½ Rename original class to (���� �ɼ� ��ư�� �����ؽ�Ʈ �ʵ忡�� ����Ŭ������ ���� �̸� �Ǵ� ������ Ŭ������ ���� ���ο� �̸��� �����Ͻʽÿ�.

Package �ؽ�Ʈ �ʵ忡��, ����Ŭ������ ������ ������ �����Ͻʽÿ�.  ï¿½Ö½ï¿½ ������ ����Ʈ�� ���˴ϴ�.
Members to Form Superclass  �гο���, ����� ����Ŭ������ ���ԵDZ⸦ ���ϴ� Ŭ���� ���(�޼ҵ�, �ʵ� ��)�� �����Ͻʽÿ�.  ï¿½ï¿½ï¿½ï¿½Å¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ���� �̿ܿ� ���� �޼ҵ� ������ �����ϱ� ���� Make abstract  Ã¼Å© �ڽ��� �����Ͻʽÿ�.

JavaDoc �׷쿡��, ���ο� ����Ŭ������ ������ �� Javadoc�� �ٷ����߸� �ϴ� �ɼ� ��ư�� �����Ͻʽÿ�.

As is  

??? 

Copy  

??? 

Move  

??? 


 3.   OK�� Ŭ���Ͻʽÿ�, �׸��� ����Ŭ������ ������ ���Դϴ�.

 4.   ï¿½ï¿½ ��, ���� ����� Extract Superclass ï¿½É¼ï¿½ ��ư�� �����ϸ�, Search Usages ï¿½ï¿½ï¿½Ì¾ï¿½Î±×°ï¿½ ��Ÿ�� ���Դϴ�:



Preview usages to be changed  Ã¼Å© �ڽ��� �����ϸ� ��ſ��� � ����� �߰ߵǾ����� ��� ����ϰ� �ְ�, �׵��� ��ü�� �����ϵ��� ����մϴ�. �� üũ �ڽ��� ���õ��� ���� ��, IDEA�� ��ü�� �ڵ������� �����մϴ�.

���� �����ϸ� IDEA�� �ҽ� Ŭ������ ����� �м��ϰ�, ����Ŭ������ ������� �׵��� ��ü�ϱ� ������, Yes �� Ŭ���ϰ�, ï¿½×·ï¿½ï¿½ï¿½ �ʴٸ� No�� Ŭ���Ͻʽÿ�.  ï¿½ï¿½ï¿½ï¿½ ���� Refactoring Preview�� ���ʽÿ�.


������ üũ �ڽ��� Ȯ�ε��� �ʾ��� ����, ���� �߰ߵ� ����� � �б� ���� ���Ͽ��� �����ϸ� ��ſ��� ��� ��ü�� Ȯ���ϱ� ���� ������Ʈ �� �� �Դϴ�.




 5.   ï¿½ï¿½ï¿½ï¿½ï¿½ ����Ŭ������ �����ϴ� �ٸ� �޼ҵ带 ��� �޼ҵ带 ����Ŭ������ �����ϱ⸦ �������� �𸨴ϴ�, �ٸ� ���� �ϸ� �װ��� ����Ŭ������ �̵����� �ʽ��ϴ�.


���� ���:

 
    public class OriginalClass extends JFrame implements Runnable, Scrollable {
         public int foo;
 
         public void method1(){
             method2();
             //some code here...
         }
 
         private void method2() {
             //some code here...
         }
    }


���⿡�� ����� method2()�� �ǵ帮�� �ʰ�  method1()��  �̵��Ϸ��� �մϴ�.  ï¿½ï¿½ ���� Problems Detected ���̾�αװ� ��Ÿ���ϴ�:



���� ����� Cancel (����Ʈ)�� ������, ����� Extract Superclass  ���̾�α׷� ���� �� ���Դϴ�. �ű⼭ ����� ������ �ַ���� ���� Ž���� �� �ֽ��ϴ�:

 method1()�� �̵����� �ʽ��ϴ�;
 
����method2()�� �̵��մϴ�;
 
method1()�� � ������ζ� �̵���Ű��, �װ����� �װ��� �߻����μ� �����մϴ�.

���� ����� Continue ������, ����Ŭ������ �װ��� �������� �ϱ� ���� ������ ���Դϴ�.  ï¿½ï¿½ï¿½ï¿½ï¿½ �װ��� �������� �����ؾ߸� �� ���Դϴ�.