inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

직접 구현하는 배열 리스트5 - 제네릭2

직접 구현 하는 컬렉션 코드는 실제 내부 구현과 유사하게 구현하시는건가요?

397

홍석현

작성한 질문수 4

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
직접 구현 하는 컬렉션 코드는 실제 내부 구현과 유사하게 구현하시는건가요?

예를 들면 배열 리스트에서 capacity를 넘어서 데이터를 추가 시에 기존 배열의 50% 정도 증가하는 방법을 사용한다고 pdf에 나와있는데 이런 부분들이 실제 구현과 같은지 궁금합니다.

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

답변 1

0

y2gcoder

안녕하세요. 홍석현님, 공식 서포터즈 y2gcoder입니다.

네 맞습니다. 영한님께서는 보통 실제 프레임워크의 코드 중 핵심 원리 코드는 그대로 구현하고자 하시고, 나머지 성능 최적화를 위한 코드들은 생략하는 방식으로 간소화하여 코드를 작성하시고 저희에게 원리를 설명하는데 집중하는 방식으로 강의하시는 스타일이십니다!

강의에서도 말씀하시듯이 직접 구현하는 코드는 2배씩 배열의 길이를 확장했지만, 실제 ArrayList의 구현 코드는 배열의 길이를 50%정도 늘리게 됩니다.

image심지어 실제 구현 코드와 메서드 이름도 똑같이 만드셨기 때문에 ArrayList를 찾아서 들어가면

image이렇게

int newCapacity = ArraysSupport.newLength(oldCapacity,
                    minCapacity - oldCapacity, /* minimum growth */
                    oldCapacity >> 1           /* preferred growth */);

해당 코드를 볼 수 있습니다.

첫번째 인자는 기존 배열의 크기,
두번째 인자는 최소로 늘릴 크기(아래의 private Object[] grow() 를 보시면 원래 길이 + 1 을 minCapacity로 사용하게 됩니다. 그래서 두번째에 들어갈 인자의 값은 1 이 됩니다!
세번째 인자로는 비트 연산을 통해 원래 배열의 길이의 50% 값을 구하는 것을 볼 수 있습니다.

그래서 해당 메서드 구현을 따라가보면 (ArraySupport.java)

image기존 배열의 길이 + (최소 증가 길이(==1), 50% 증가 길이 중 최댓값)으로 새 배열 길이를 반환해주는 것을 보실 수 있습니다.

그리고 다시 ArrayList를 보시면 반환받은 새 길이의 배열을 만들고 기존 값을 복사해서 넣어주는 것을 보실 수 있습니다!

 

감사합니다.

1

홍석현

답변 감사합니다

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

0

80

3

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

1

135

4

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

0

62

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

99

3

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

0

70

2

퀴즈 오류 관련 문의

0

109

1