inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

문제와 풀이1

List 생성할때

104

혜진

작성한 질문수 4

1

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


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

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

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

 

안녕하세요!

문제와 풀이를 해보다 문득 궁금해졌는데,

혹시 ArrayList 생성할때

List<Integer> list = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();

두개의 차이가 있을까요 ..?

 

 

java 객체지향 코딩-테스트 알고리즘

답변 2

1

인프런 AI 인턴

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

질문해주신 List<Integer> list = new ArrayList<>();ArrayList<Integer> list = new ArrayList<>(); 두 가지 선언의 차이에 대해 설명드리겠습니다.

  1. List list = new ArrayList<>();

    • 상위 타입 참조: 이 선언은 List라는 인터페이스 타입으로 ArrayList 객체를 참조합니다. 이는 코드의 유연성을 높이는 장점이 있습니다. 즉, 나중에 참조 변수 list가 다른 List의 구현체로 변경되어도 코드의 나머지 부분에서는 변경이 필요 없게 됩니다.
  2. ArrayList list = new ArrayList<>();

    • 구현 클래스 참조: 이 선언은 ArrayList의 구체적인 구현 클래스로 참조를 만듭니다. 이는 해당 객체가 ArrayList의 특성이나 메서드에 의존할 필요가 있는 경우 적합합니다.

가장 큰 차이는 유연성과 구체적인 구현체 사용에 대한 차이입니다. 일반적인 경우, 인터페이스 타입을 사용하여 선언하는 것이 더 좋은 실천 방법인 경우가 많습니다. 이는 변경에 유연하며 다른 List 구현체로 쉽게 변경할 수 있기 때문입니다.

이와 관련된 유사한 질문에 대한 답변을 몇 가지 링크로 공유드립니다:
- List와 ArrayList
- 컬렉션 필드에서 초기화 질문이 있습니다. (ArrayList 기본 사이즈 문제)
- List 초기 값 문의드립니다.

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

0

dev.rudevico

List<Integer> list = new ArrayList<>();
list = new LinkedList<>(); // 나중에 list 변수에 담을 참조를 List의 또 다른 구현체로 변경 가능
  • ArrayList 객체를 생성 후에 List 타입의 변수에 그 참조를 보관합니다 (부모는 자식을 담을 수 있음을 이용).

  • 나중에 ArrayList가 아닌 LinkedList 등의 List의 또 다른 구현체를 사용하기를 원할 때 list2라는 새로운 변수를 생성하지 않고도 기존의 list 변수에 그 참조를 보관할 수 있습니다.


ArrayList<Integer> list = new ArrayList<>();
//list = new LinkedList<>(); // 컴파일 에러
LinkedList<Integer> list2 = new LinkedList<>(); // 새로운 변수를 생성 후 보관해야 됨
  • list 변수의 타입이 ArrayList이므로 해당 타입의 참조만 보관할 수 있습니다.

  • 나중에 LinkedList를 사용하는 방향으로 변경하고 싶다면, 기존의 list 변수에는 타입이 일치하지 않아 그 참조를 보관할 수 없습니다.

 

제네릭 타입 매개변수 제한과 관련한 문의입니다.

0

80

3

강의가 좀 버겁다 느껴질 때 학습방법 문의

1

135

4

제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T

0

61

1

new T()가 안 되는 니유

0

102

1

안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.

0

98

2

자바 로드맵 선택 질문

0

111

2

실전 자바 중급 - 2편 후 추천 강의

0

176

2

실프로젝트에서 Java25버전 사용

0

121

1

Arrays.sort

0

68

1

블로그 작성 시, 저작권 문제에 대하여

0

166

1

중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.

0

94

3

pop()과 poll()의 차이

0

94

1

특정 index의 노드 조회하기 질문

0

66

2

List.of() 비어있는 불변 리스트 생성

0

81

2

문제2: 개 타입 반환

0

56

2

[리뷰] 중급2편까지 겨우 완강 했습니다.

0

114

2

문제와 풀이1 Ex2와 Ex3

0

65

2

노드 삭제시 노드 null값으로 초기화

0

77

2

강의영상에 대한 질문

0

57

1

타입 매개변수 제한

0

59

1

compareTo

0

68

1

직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다

0

98

3

섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨

0

70

2

퀴즈 오류 관련 문의

0

109

1