채널톡 아이콘

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

딸기초콜릿님의 프로필 이미지

작성한 질문수 6

김영한의 실전 자바 - 중급 1편

Object 다형성

List<Integer> list = new ArrayList<>();가 사용 가능한 이유

해결된 질문

작성

·

306

·

수정됨

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
여기에 질문 내용을 남겨주세요.

List<Integer> list = new ArrayList<>(); 이것이 왜 list 인터페이스가 클래스처럼 기능이 구현된 채로 사용될 수 있는 것이죠? 클래스처럼 기능이 구현된 채로 사용하려면 ArrayList<Integer> list = new ArrayList<>(); 이렇게 사용해야 하지 않나요,,?

답변 1

1

OMG님의 프로필 이미지

안녕하세요. 딸기초콜릿님, 공식 서포터즈 OMG입니다.

ArrayList 클래스에만! 존재하는 메서드를 호출해야한다면, 부모타입으로는 불가능하고 말씀하신 것처럼

ArrayList<Integer> list = new ArrayList<>(); 자신의 타입으로만 가능합니다.

그렇지 않고, List인터페이스에 정의되어 있는 메서드만 사용한다면 인터페이스 타입으로 선언해도 가능합니다.

왜냐하면 클래스가 인터페이스를 implements한다면, 코드를 작성하여 구현(강제)하기 때문입니다.

감사합니다.

딸기초콜릿님의 프로필 이미지

감사합니다. 기초적인 내용인데 객체지향 공부를 안한지 좀 돼서 헷갈렸네요. 인터페이스에 실제로 구현된 클래스를 대입하면 그 인터페이스 안의 추상화된 메서드들에 한해서 오른쪽(arraylist)의 클래스가 오버라이딩해서 구현한 메서드를 사용할 수 있다는 것일까요?

OMG님의 프로필 이미지

정확히 이해하셨습니다 😀