매개변수가 많을수록 많은 역활을 한다. 많은 역활을 한다는 뜻은 많은 기능, 서로 연관관계가 있는 많은 코드들이 한곳 에 있다는 소리다.
불필요한 매개 변수가 없나 체크해보자
자바 객체지향에서는 서로 코드들이 독립적일수록 좋다.
어떤 매개변수를 다른 매개변수를 통해서 알아낼수 있다?
-> 매개변수 질의 함수로 바꾸기
객체 통째로 넘기기
매개변수가 플래그로 사용된다면 ?
->플래그 인수 제거하기
여러 함수가 일부 매개변수를 공통적으로 사용한다면?
-> 여러 함수를 클래스로 묶기
함수의 매개변수 목록은 함수의 다양성을 대변하며, 적을수록 이해하기 좋다.
매개변수에 값을 전달하는 것은 "함수를 호출하는 쪽" 의 책임이다. 가능하며 함수를 호출하는 쪽의 책임을 줄이고 함수 내부에서 책임지도록 노력한다.
메서드 추출후 메서드이름까지 직관적으로 바꿔준다
-> 메서드를 분리함으로써 좀더 직관적이고 플래그 인수도 제거했다.
또한 코드를 나눔으로써 서로 좀더 독립적인 코드가 됐다.
=> 메서드 하나가 너무 많은 기능을 처리하면 그만큼 수정시 전체 코드를 수정해야한다. 또한 서로 너무 의존적이다. 자바에서는 서로 좀 더 독립적이게 만들어주자
=> Print라는 긴 메서드를 분리할 생각이다.(그래야 좀더 독립적이니까)
print 코드중 일부를 메서드 추출시도해보자
-> 이 일부 메서드는 participants라는 매개변수로 필요함
또한 Print 메서드에 필요한 메서드들 안에서 필요한 공통적인값( 맨위에 필드로 선언되있는)
그러면 메서드 추출 메서드 에 필요한 요소는
- Participants
- 공통적인값(메서드 추출 내부에서 필요한 공통값)
이 두가지만 있으면 메서드 추출로 만든 메서드를 따로 클래스로 빼서 Print(긴 메서드) 를 좀더 독립적으로 서로 분해할수 있지 않을까???
=> 긴함수 ->분리 ->분리하는 부분에서 필요한것들을 챙겨서 다른 클래스로 옮겨준다. => 좀더 독립적인 코드가 됌
필드값으로 선언한 요소들을 통해 값을 얻을수있다면 그만큼 매개변수도 줄어든다
매개변수와 필드변수 구별위해 this 를 사용화 하자
결론
==> 관련있는 데이터를 한곳으로 옮기고 메서드를 옮기면 매개변수도 줄면서 이해하기 쉬운코드가 됀다!