Introduce Parameter Refactoring  

 

�� ������ Introduce Parameter   �����丵 ������  overview�� �����ϰ�  how ï¿½ï¿½ �����丵�� IntelliJ IDEA���� ���� �� �ִ°��� �����մϴ�.

����


���� ����� �޼ҵ� �ݿ��� �Ѿ�� �Ϻ� ���� �ʿ�� �ϸ� Introduce Parameter  ï¿½ï¿½ï¿½ï¿½ï¿½ä¸µï¿½ï¿½ �� ������ �޼ҵ� ���� �߰��ϱ� ���� ���˴ϴ�.  ï¿½Þ¼Òµï¿½ ����� ���� ����˴ϴ�.  ï¿½Å°ï¿½ ������ ������ �޼��� �ñ׳��� ���� �����丵(������ ������Ʈ��Ʈ�� �ܼ��� �ؽ�Ʈ�μ� ���Ե� ��)�� ���� �ʰ� �ذ�˴ϴ�.

���� ���, �����丵 ���� ���� �ڵ尡 �ֽ��ϴ�:

 
    public int myMethod(int aParam) {
        return aParam + (aParam + 1);
    }
 
    public void anotherMethod() {
        myMethod(5);
    }


�׸��� ����� �� �ٸ� �� ������ (aParam + 1) Ç¥ï¿½ï¿½ï¿½ï¿½ ��ſ� myMethod �� �����ϴ� ���� �����߽��ϴ�.  ï¿½ï¿½ï¿½ï¿½ï¿½ä¸µ ���� ����� ���� �ڵ带 ���� ���Դϴ�:  

 

 
    public int myMethod(int aParam, int newParam) {
        return aParam + newParam;
    }
 
    public void anotherMethod() {
        myMethod(5, (5 + 1));
    }
 

���ο� �Ű� ���� newParam �� �����Ǿ��� �޼ҵ� �ݿ��� �� ���� ���� �ʱ�ȭ�Ǿ����ϴ�.

�� ���� ����


�Ű� ������ �����ϱ� ����, �����Ϳ��� �Ű� ������ ��ü�� ǥ������ �����Ͻʽÿ�.


Introduce Parameter �����丵�� ������ ǥ������ �����ϱ� ���� Ctrl + W  (�ܾ� ����)�� ����ϴ� ���� ���� �����մϴ�. �ڵ��� ���� Ȯ���� �����ϰ� ����� ij���� ������ ��� ���� ��ġ�ϰ�, Ctrl + W�� �� �� ������ � ǥ�����̶� ���� �ڵ忡�� �����ص� �����ϴ�.


���� �޴����� �Ǵ� �����Ϳ��� ������ ��ư�� Ŭ���Ͽ� �ҷ����� �˾� �޴����� Refactor Introduce Parameter... ï¿½ï¿½ Ŭ���մϴ�. �Ǵ� Ctrl + Alt + P   ������ ����մϴ�.


���� ���� ������ �����丵�� �����ϸ鼭, ����� ������ �װ� ������ ij���� ��ġ�� �� �ֽ��ϴ�.  ï¿½×·ï¿½ï¿½ï¿½ �ʵ� ������ �����丵�� �����ϱ� ����, �ʵ尡 �����Ϳ��� ���õǾ�߸� �Ѵٶ�� ���� �����Ͻʽÿ�.



���� Introduce Parameter  ï¿½ï¿½ï¿½Ì¾ï¿½Î±ï¿½ï¿½ï¿½ ��Ÿ���ϴ�:



���̾�α״� ������ ��� �����ϴ�:

Parameter of type  

������ �Ű� ������ ���� Ÿ���� �����Ͻʽÿ�.

Name  

������ �Ű� ������ ���� �̸��� Ÿ�����ϰų�, IDEA�� ���� ���ȵ� �ϳ��� ����մϴ�.

Declare final  

���� ���õǸ�, ������ �Ű� ������ ���������� ����˴ϴ�.

Preview usages  to be changed  

�� üũ �ڽ��� �����ϸ� ����� � ����� �߰ߵǾ����� �����ϰ�, �׵��� ��ü�� �����ϵ��� ����մϴ�.  ï¿½ï¿½ üũ �ڽ��� ���õ��� ���� ��, IDEA�� ��ü�� �ڵ������� �����մϴ�.


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


�����丵�� �����ϱ� ���� Enter�� �����ʽÿ�.

Ư���� ����


���� Ư���� �̽��� ��޵Ǿ�߸� �մϴ�:

  ���� �ʵ尡 �޼ҵ� ���𿡼� ���ο� �� �����μ� �����DZ⸦ ���ϸ�, �޼ҵ� �ݿ��� �� �ʵ�� Ŭ���� �ν��Ͻ��� �ʵ�μ� ������ ���Դϴ�.
 

���� ������ ����ϰ� �ִ� �ʵ带 �߰��մϴ�:  
 
    public class AClass {
        public int myField;
 
        public int myMethod(int aParam) {
            return aParam + (myField + 1);
        }
    }
 
    public class AnotherClass {
        AClass aClass = new AClass();
 
        public void anotherMethod() {
            aClass.myMethod(5);
        }
    }
 
�����丵 ���� ����� ������ �ڵ带 ���� ���Դϴ�:
 
    public class AClass {
        public int myField;
 
        public int myMethod(int aParam, int newParam) {
            return aParam + newParam;
        }
    }
 
    public class AnotherClass {
        AClass aClass = new AClass();
 
        public void anotherMethod() {
            aClass.myMethod(5, (aClass.myField + 1));
        }
    }



 
���� Ŭ���� ���� ��Ұ� �����ϱ� ������(���� ���, ���� �������� �ʵ�� private�Դϴ�), �װ��� �޼ҵ� �ݿ� ���Ե� ���Դϴ�. �׷��� �� ������ ������ �ȵǰ� ����� �����μ� ������ ���Դϴ�.

 
���� ����� ���Ϳ� �Բ� Introduce Parameter  ï¿½ï¿½ï¿½ï¿½ï¿½ä¸µï¿½ï¿½ ���� �ʵ带 ����ϸ�, ��ſ��� Ȯ��� ���̾�α׷� ������Ʈ�� ���Դϴ�:



 
���̾�α״� �ɼ� �׷� Replace fields used in expressions with their getters�� �����ϴ�

Do not replace  

�ʵ��� ��� �͵� ���Ϳ� �ݷ� ��ü���� ���� ���Դϴ�.

Replace fields  inaccessible in usage context  

��� �������κ��� ���� �׼����� �� ���� �ʵ常�� ���Ϳ� �ݷ� ��ü�� ���Դϴ�.

Replace all fields  

��� �ʵ�� ���Ϳ� �ݷ� ��ü�� ���Դϴ�.




 
���� ���� ������ �����丵�� �����ϸ� �� ���� ��� üũ �ڽ��� �Բ� Introduce Parameter ï¿½ï¿½ï¿½Ì¾ï¿½Î±×¸ï¿½ �θ� ���Դϴ�.  ï¿½ï¿½ï¿½ï¿½ ���, ����� ������ �ڵ带 �����ϴ�:  

 
    public int myMethod(int firstPar) {
        int secondPar = firstPar + 1;
        return firstPar + secondPar;
    }


�׸��� ����� secondPar  ������ �����ϰ� �ִ� Introduce Parameter  ï¿½ï¿½ï¿½ï¿½ï¿½ä¸µï¿½ï¿½ �����մϴ� .

����� ������ ���̾�α� �������� �� ���Դϴ�:

Replace all  occurrences (<number_of_occurences> occurrences)  

�����ϸ�, ���õ� ������ ��� �߻��� �� ������ ��ü�� ���Դϴ�. �׸��� Delete variable üũ �ڽ��� ��� �����ϰ� �ϰ� �˴ϴ�.  ï¿½×·ï¿½ï¿½ï¿½ ������, ������ ���õ� ���� ����� �� ������ ��ü�� ���Դϴ�.


������ ���õ� ������ �� �̻��� �� ���� �߻��� ���� ��쿡 �� üũ �ڽ��� ��Ÿ���ϴ�.


Delete variable  definition  

�����ϸ�, ���� ���Ǵ� ������ ���Դϴ�.

Use variable  initializer to initialize parameter  

�����ϸ�, ���� �̴ϼȶ������� �޼ҵ� �ݿ��� �Ű� ������ �ʱ�ȭ�ϱ� ���� ���� ���Դϴ�.


Enter�� ������ �����丵�� ������ ���Դϴ�.

 

���ۿ�


���� ���� �޼ҵ� �� ������ Ŭ���� �ν��Ͻ� �Ǵ� ǥ���� ������ ����ȴٸ�, Introduce Parameter  ï¿½ï¿½ï¿½ï¿½ï¿½ä¸µï¿½ï¿½ ����ϴ� ���� ������� ���ۿ��� ���� �� �ֽ��ϴ�.  ï¿½ï¿½ï¿½ï¿½ ���, �׷� �ڵ��� ��쿡��:  

 
class AClass {
    int field;
    int method() {
        return field;
    }
}
 
class Usage {
    void method(List list) {
        int sum = 0;
        for(Iterator it = list.iterator(); it.hasNext(); ) {
            sum += ((AClass) it.next()).method();
        }
    }
}

 

�׸��� field ï¿½Êµå¸¦ ���� ����� �����丵 ���� �ڵ�:

 
class AClass {
    int field;
    int method(int newfield) {
        return newfield;
    }
}
 
class Usage {
    void method(List list) {
        int sum = 0;
        for(Iterator it = list.iterator; it.hasNext(); ) {
            sum += ((AClass) it.next()).method(((AClass) it.next()).field);
        }
}

 

�ݺ� ���� ������ ����� �����ߴ� ������ �ƴ� �� ��� �����˴ϴ�

�׷���, IDEA�� �Ͻ��� ������ ���������� ����� �� �ְ�, ����/����/���� ����� new Ű���� ���� ���� ��츦 �ذ��� �� �ֽ��ϴ�.

���� ���

 
    public int myMethod(List list) {
        return list.size();
    }
 
    public void anotherMethod() {
        myMethod(new ArrayList());
    }

�׸��� �����丵 ���� �ڵ�:  

 
    public int myMethod(List list, int newPar) {
        return list.size();
    }
 
    public void anotherMethod() {
        final ArrayList list = new ArrayList();
        myMethod(list, list.size());
    }

 

���ο� ���� list ï¿½ï¿½ �����ǰ� �޼ҵ� ���� ���� ���Ǵ� ��� �� ������ �� ������ ����ϸ鼭 �����˴ϴ�.