Map store = new HashMap();

Woolly·2023년 5월 7일
0
private static Map<Long, Member> store = new HashMap<>();

상위객체 = new 하위객체(); 사용 이유?


자바는 객체 지향 언어이고, 객체 지향 언어의 꽃은 바로 다형성(Polymorphism)에 있습니다.

여기서는 단순하게 Map store = new HashMap() 이렇게 선언했는데요.

이 부분만 보면 HashMap store = new HashMap()와 비교해서, 이점은 다음과 같습니다.

  1. Map 인터페이스의 제약을 따르겠다는 의도를 명확하게 드러냅니다.

  2. 사용하는 코드가 Map 인터페이스 제약을 따르기 때문에 향후 변경시에 사용코드를 변경하지 않아도 됩니다.

  3. HashMap을 다른 클래스로 변경이 필요하면 선언하는 코드만 변경하면 됩니다. 사용하는 코드를 고민하지 않아도 됩니다.

  4. 다른 개발자들이 이 코드를 나중에 더 성능이 좋거나 동시성 처리가 가능한 종류의 구체적인 Map으로 변경해야 할 때 HashMap store = new HashMap()이라고 되어 있다면, 변경 시점에 상당히 많은 고민을 해야 하지만 Map store = new HashMap()으로 선언이 되어 있다면 편안하게 선언부를 변경할 수 있습니다.

  5. 개발은 무의미한 자유도를 제공하는 것 보다, 제약을 부여하는 것이 혼란을 줄이고, 유지보수하기 쉽습니다.

  6. 만약 정말 HashMap의 구체적인 기능을 사용해야 한다면 HashMap store = new HashMap() 이라고 선언하는 것이 맞습니다.

여기까지는 클래스 내부에서 사용하는 것에 대한 부분입니다.

여기서 한발 더 나가면 다음과 같은 설계도 가능합니다.

class MemberRepository {

private Map store;

public MemberRepository(Map store) {

this.store =store

}

}

외부에서 선언하는 코드

new MemberRepository(new HashMap());

new MemberRepository(new ConcurrentHashMap());

이렇게 해서 MemberRepository를 전혀 변경하지 않고, 외부에서 구현 객체를 생성해서 파라미터로 넘길 수 있습니다. 이런 것을 의존관계 주입( DI )이라고 하는데요. 이런 방법도 다형성 덕분에 사용할 수 있습니다.


출처 : https://www.inflearn.com/questions/47449/private-static-map-lt-long-member-gt-store-new-hashmap-lt-gt-%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8%EC%9E%85%EB%8B%88%EB%8B%A4

profile
Ad Astra

0개의 댓글