�� ������ 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 ������, ����Ŭ������ �װ��� �������� �ϱ� ���� ������ ���Դϴ�. ����� �װ��� �������� �����ؾ߸� �� ���Դϴ�.
|