기타
2021, Sep 09
오버로딩 vs 가변 인수
- java9의 컬렉션 API 중 List 인터페이스에서 List.of의 오버로드 메소드들이 존재하는 이유
→ 오버로드 말고 static
→ 내부적으로 가변 인수는 추가배열을 할당해서 리스트로 감싼다.
→ 이렇게 되면, 가변인수로 받은 배열을 할당 → 초기화 → gc까지 실행해야하는 비용이 필요하게 된다.
비슷한 예로 Set.of, Map.of 도 마찬가지
객체지향
:: 디미터의 법칙 (Law of Demeter)
디미터 법칙은 객체 O의 메소드 m은 다음의 객체들의 타입의 메소드만 호출해야 한다는 법칙이다.
O 객체 자신의 메소드들. (O itself)
m의 파라미터로 넘어온 객체들의 메소드들.(M’s parameters)
m 안에서 생성 되거나 초기화된 객체의 메소드들.(Any objects created/instantiated within M)
O객체의 직접 소유하는 객체의 메소드들.(O’s direct component objects)
5.O객체의 m에서 접근이 가능한 전역변수의 메소드들.(A global variable, accessible by O, in the scope of M)
class Demeter {
private A a;
private int func() { return 0; }
public void example(B b) {
C c = new C();
int f = func(); // 1번의 경우
b.invert(); // 2번의 경우
a = new A();
a.setActive(); // 3번의 경우
c.print(); // 4번의 경우
// Static으로 설정된 Setting 변수가 있다고 가정할때.
string UserID = GlobalValues.Setting.getUserID(); //5의 경우
}
}
위의 종류에 해당하는 객체의 메소드들만 호출을 해야한다. 그렇지 않으면 유지보수 측면에서 문제점들이 발생한다. 아래의 예를 보면,
objectA.getObjectB().doSomething();
objectA.getObjectB().getObjectC().doSomething();
출처:
https://hongjinhyeon.tistory.com/138