인프런 커뮤니티 질문&답변

nahyeon.lee님의 프로필 이미지
nahyeon.lee

작성한 질문수

김영한의 실전 자바 - 기본편

List<String> list = new ArrayList<>(); 이와 같이 작성하는 이유를 알고 싶습니다.

작성

·

177

0

다형성 부분을 배우다보니 비슷한 맥락일 것 같아서요.. 하지만 확실히 이해되지는 않습니다.

보통 Map, List를 사용할 때 위와같이 작성하는데, 위와같이 작성할 경우 부모클래스에 있는 method만 사용가능하면서 오버라이딩된 형태로 쓰이잖아요. 그런데 왜 굳이 앞에 부모클래스를 적어주는 걸까요?

답변 2

0

안녕하세요. nahyeon.lee님, 공식 서포터즈 y2gcoder입니다.

다음 링크(클릭)의 영한님 답변을 참고해주십쇼!

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

nahyeon.lee님의 질문은 ‘왜 자바에서 컬렉션 타입을 사용할 때 인터페이스 타입으로 선언하고 구현 클래스로 초기화하는지’에 대한 궁금증을 담고 있습니다. 이 질문은 프로그래밍에서의 다형성과 인터페이스 기반 프로그래밍의 원칙과 관련이 있습니다.

질문에 직접적으로 답변하기는 어려울 수 있으나, 비슷한 맥락의 질문에 대한 답변에서 도움이 될 수 있는 부분을 공유해드릴게요.

  • list와 arraylist에서는 메소드의 반환 타입을 ArrayList의 상위 인터페이스인 List로 지정하는 이유를 논의합니다. 이는 구현체를 바꾸더라도 외부에 노출될 때는 List 인터페이스로 노출되기 때문에, findAll()을 사용하는 곳의 변경 없이 다른 리스트 구현체로의 교체가 가능하다는 장점이 있습니다. 이는 코드의 유연성과 확장성을 높여줍니다.

이러한 설명은 다형성의 일반적인 원칙을 따르는 것으로, 인터페이스를 사용하는 이유 중 하나입니다. 구체적인 구현체를 사용하는 대신 인터페이스를 사용함으로써, 나중에 다른 구현체로 쉽게 교체할 수 있게 되어, 코드의 유연성과 확장성이 증가합니다. 또한, 이는 코드의 결합도를 낮추며 유지보수성을 향상시키는 효과가 있습니다.

질문에서 언급하신 ‘부모클래스에 있는 method만 사용 가능하면서 오버라이딩된 형태로 쓰이는’ 부분은 이러한 원칙을 따르기 위한 것이며, 특정 구현체의 메서드를 사용할 필요가 있을 때는 해당 구현체 타입으로 캐스팅하여 사용할 수 있습니다. 하지만 일반적으로는 인터페이스로 제공되는 메서드로도 충분한 경우가 많으며 이렇게 함으로써 더 유연하고 재사용 가능한 코드를 작성할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

nahyeon.lee님의 프로필 이미지
nahyeon.lee

작성한 질문수

질문하기