함수에 매개 변수로 인스턴스를 전달하는 경우가 종종 있습니다. 대신 객체의 매개 변수를 전달하고 메소드 내에서 초기화하는 것도 마찬가지로 가능했습니다.인스턴스를 메서드에 전달합니다. 전달 매개 변수
예 :
class MyCanvas extends JComponent {
private static final long serialVersionUID = 1L;
private static ArrayList<String> textData;
private static ArrayList<Rectangle> rectData;
@Override
public void paintComponent(Graphics g) {
if(g instanceof Graphics2D){
//Draw the rectangles and text
}
}
public void addText(int x, int y, String text){
textData.add(text);
}
//Do this:
public void addRect(Rectangle rect){
rectData.add(rect);
}
//Or do this?
public void addRect(int x, int y, int z, int q){
rectData.add(new Rectangle(x, y, z, q);
}
}
이 경우, 가변성을 감소 네 개의 정수를 전달. 이론적으로는 취약점의 잠재력과 함께 오류 표면적을 줄여야합니다.
JVM은 어떻게이 두 예제를 다르게 처리합니까?
진정한 오류/취약성이 적은가요?
성능 측면에서 다른 것보다 효율적입니까?
참고 : 이것은 디자인 환경 설정에 대한 질문이 아닙니다. 두 가지 방법으로 유연하고 효율적인 방법으로 매개 변수를 여러 방법으로 묶거나 바인딩 할 수 있습니다. 내가 알고 싶은 것은 바이트 코드 레벨에서의 차이점과 바이트 코드 레벨에서 분명히 더 효율적/안전한지 여부입니다.
"또는 매개 변수를 전달하고 메서드에서 초기화 하시겠습니까?" 'Frobnitz'를 만들기 위해 여러 매개 변수를 사용한다면'Frobnitz' 인스턴스를 대신 전달하십시오. 이는 'Frobnitz'의 특정 구현에 대한 올바른 결합을 감소시킵니다. 'MockFrobnitz'를 통과 시키면 테스트하기가 더 쉽습니다. –
또한, 함수에 전달 된 후 객체의 변경이 걱정되는 경우, 메소드 내부에서 복제를 사용할 수 있습니다. –
또는 [facade] (https://en.wikipedia.org/wiki/Facade_pattern)에 인스턴스를 래핑하면 다른 사람들이 사용하기를 원하는 방법 만 공개 할 수 있습니다. –