클��������� ���해 ��������� 확���하��� ��������� ��������� 하���������. 하������ ������������ 하������ ������(Delegation) ������. ��������� 하��� ��������� 해��� 클��������� ��������� 확������킬 ��� ������ ��������� ������.
���한, 클������ 하������ ������해������, ������하��� ��� 클��������� ��������� ������ 클��������������� ������해������ ������ Refactoring ��� ��������� ������.
ObjectOrientedProgramming ��� 할��� ������ ��������� ������ ��������. ������ ������������ ��������������� ������ ��� ���������.
example) ��������� VonNeumannAirport ��� JuNe ��� 1002 ��� Pair 하������ JuNe ��� ������했��� Refactoring ������������ Delegation.
~cpp public class Airport { private int _traffic; private int [] _arrivalGate; private int [] _departureGate; private PassengerSet psg; public int getTraffic() { ListIterator iter = psg.passengers.listIterator(); int [] passenger; while (iter.hasNext()) { passenger = (int [])iter.next(); movePassenger(passenger[0], passenger[1], passenger[2]); } return _traffic; } public void setArrivalGates(int [] aCity) { _arrivalGate = aCity; } public void setDepartureGates(int [] aCity) { _departureGate = aCity; } public int [] getArrivalGates() { return _arrivalGate; } public int [] getDepartureGates() { return _departureGate; } public int getDistance(int fromCity, int toCity){ int distance=java.lang.Math.abs(_getArrivalCityGate(fromCity) -_getDepartureCityGate(toCity))+1; return distance; } private void movePassenger(int fromCity, int toCity, int aNumber) { _traffic+=getDistance(fromCity,toCity)*aNumber; } public void setPassengers(PassengerSet psg) { this.psg=psg; } }��������������� Airport ������. 하������ VonNeumannAirport ��������������� ������, ������ Input ��� ���해��� Configuration ��� ������ Set ��� ���������.
��� ��������� ������하��� ���해 ������ Airport Code ��� Refactoring 하������ 했���. ������ ���해 Airport ��� ��������� Configuration ��� ��������� ��������� ���해 Configuration ��� Extract 하���, ������������������ Delegation 함��������� ��������������� ��������� ��������� ���해������ ������������ ������한���. (Test Code ��� ��������� Guard ���할��� 했������)
~cpp import java.util.ListIterator; class Configuration { private int [] _arrivalGate; private int [] _departureGate; private int id; public void setArrivalGates(int [] aCity) { _arrivalGate=aCity; } public void setDepartureGates(int [] aCity) { _departureGate=aCity; } public int [] getArrivalGates() { return _arrivalGate; } public int [] getDepartureGates() { return _departureGate; } public int getDistance(int fromCity, int toCity){ int distance=java.lang.Math.abs(_getArrivalCityGate(fromCity) -_getDepartureCityGate(toCity))+1; return distance; } public int _findInIntArray(int anInt,int [] anArray) { for (int i=0;i<anArray.length;i++) { if (anArray[i] == anInt) return i+1; } return -1; } public int _getArrivalCityGate(int aCity) { return _findInIntArray(aCity,getArrivalGates()); } public int _getDepartureCityGate(int aCity) { return _findInIntArray(aCity,getDepartureGates()); } public int getId() { return id; } public void setId(int anId) { id=anId; } } public class Airport { private int _traffic; private int [] _arrivalGate; private int [] _departureGate; private PassengerSet psg; private Configuration conf=new Configuration(); public int getTraffic() { ListIterator iter = psg.passengers.listIterator(); int [] passenger; while (iter.hasNext()) { passenger = (int [])iter.next(); movePassenger(passenger[0], passenger[1], passenger[2]); } return _traffic; } public void setArrivalGates(int [] aCity) { conf.setArrivalGates(aCity); } public void setDepartureGates(int [] aCity) { conf.setDepartureGates(aCity); } public int [] getArrivalGates() { return conf.getArrivalGates(); } public int [] getDepartureGates() { return conf.getDepartureGates(); } public int getDistance(int fromCity, int toCity){ return conf.getDistance(fromCity,toCity); } private void movePassenger(int fromCity, int toCity, int aNumber) { _traffic+=getDistance(fromCity,toCity)*aNumber; } public void setPassengers(PassengerSet psg) { this.psg=psg; } }
DelegationPattern��� ��� ��� ������한 ������, DelegationPattern��� ������하��� 클��������� 클���������트��� ��� 클��������� Delegation��� ��������� ������������ ��������� 한������ ���������. ���, ������������ ������ DelegationPattern��� ��������� 클��������� ������ 클��������� ������하��� ������������ ������������������ 한���. ������������ ��������� ��������� ��������� ������하��� 학������ ������ ������������ ��� ��������� ������해��� ���������.
ResponsibilityDrivenDesign , Refactoring, DelegationPattern ��� ������히 ������������ ������ ��������� ������ ��� ������. (DesignPattern ��� ���������������)
������ SE ������������ ���포���트��������� ����������� ���������하������ '��������������� ������������ ��������� ���������' ������������ 하���������, ��� ������ ��� 하������������ Delegation ��� ���한 ��������� ����� ��������������� ������������. Delegation ��� ��� ���해해��� ��� ���포���트 ����������� ������화 ����������������� ��� ���행할 ��� ������, ��������� ������ ��������������� ��� ��������� ��� ��� ������������.. --1002