- 2021๋ ์ถ์๋ Java 17 ์ดํ 2๋ ๋ง์ ์ถ์๋ Java์ 4๋ฒ์งธ LTS(Long Term Support) ๋ฒ์
- ์ฃผ์ ๋ณํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Sequenced Collections
- Virtual Thread
- Record, Switch ๊ฐ์
- ์ด ๊ธ์์๋ Sequenced Collections์ ๋ํด ๋ค๋ฃฌ๋ค.
-
๊ธฐ์กด ์ปฌ๋ ์ ํ๋ ์์ํฌ๋ ์ปฌ๋ ์ ๋ด ์์๋ค์ ์์๊ฐ ์กด์ฌํ ๋ ์ฌ์ฉ๋๋ ๋ฌธ๋ฒ์ด ์ ๊ฐ๊ฐ์ด๊ณ , ์ผ๋ถ๋ ๊ฐ๋ ์ฑ๋ ์ข์ง ์์๋ค.
-
์๋ฅผ ๋ค์ด,
List์ธํฐํ์ด์ค์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ์์ ์ ๊ทผ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.List<String> wordList = new ArrayList<>(); String firstWord = wordList.get(0); // ์ฒซ ๋ฒ์งธ ์์ String lastWord = wordList.get(wordList.size() - 1); // ๋ง์ง๋ง ์์
๋ง์ง๋ง ์์ ์ ๊ทผ์ ๊ฒฝ์ฐ ๋ฆฌ์คํธ์ ๊ธธ์ด์์ 1์ ๋บ ๊ฐ์ด ๋ง์ง๋ง ์์์ ์ธ๋ฑ์ค์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ด์ฉํด ํ๋ํ๊ณ ์์์ ์ ์ ์๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด ๋ณธ ์ฌ๋๋ค์๊ฒ๋ ์ต์ํ ํํ๋ฒ์ด๋ผ ์ด์ํจ์ ๋๋ผ์ง ๋ชปํ ์๋ ์๊ฒ ์ง๋ง,
๋ฉ์๋๋ช ๊ณผ ํ๋ผ๋ฏธํฐ ์ด๋์๋ ๋ง์ง๋ง์ ์๋ฏธํ๋ ํํ์ด ์๋ค. -
์ด์ ๋ฌ๋ฆฌ
Deque์ธํฐํ์ด์ค์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ์์ ์ ๊ทผ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.Deque<String> wordList = new ArrayDeque<>(); wordList.getFirst(); wordList.getLast();
List์ ๋ฌ๋ฆฌ ์ฒ์๊ณผ ๋์ ์์๋ฅผ ๋ฐํํ๋ค๋ ์๋ฏธ๊ฐ ํ์คํ ๋ ๋ฉ์๋๋ฅผ ์ง์ํ๊ณ ์๋ค.
-
๋ฌธ์ ๋, List ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ Deque ๊ตฌํ์ฒด๋ฅผ ํ ๋นํ๋ฉด์ ๋ฐ์ํ๋ค.
- ๊ธฐ์กด์ get์ ํตํด ์์๋ฅผ ํ๋ํ๋ ๋ถ๋ถ์
๋ชจ๋ getFirst์ getLast๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค. - ์ด๋ ํ์ฅ์ฑ ๋ฉด์์ ์ข์ง ์์ ๋ณํ๋ฅผ ์ผ์ผํจ๋ค๊ณ ๋ณผ ์ ์๋ค.
- ๊ธฐ์กด์ get์ ํตํด ์์๋ฅผ ํ๋ํ๋ ๋ถ๋ถ์
-
์์์ ์ค๋ช ํ ๋ฐ์ ๊ฐ์ด, ์ผ๋ถ ์ธํฐํ์ด์ค์์ ๊ฐ๋ ์ฑ์ด ๋์ ๋ฌธ์ ๋ ์์์ง๋ง ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋
์์๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์์ด ์ผ๊ด๋์ง ์๋ค๋ ์ ์ด๋ค. -
์ด๋ฌํ ๋ถํธํจ์ ํด๊ฒฐํ๊ธฐ ์ํด Java 21์์ ๋์ ๋ ๊ฒ์ด ๋ฐ๋ก
Sequenced Collections์ด๋ค. -
์ถ๊ฐ๋ Sequenced Collections์ ์ธํฐํ์ด์ค ๊ณ์ธต ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
- ์ถ๊ฐ๋ ์ธํฐํ์ด์ค๊ฐ ๊ธฐ์กด List, Deque์ ๊ฐ์ ์ธํฐํ์ด์ค์ ๊ณตํต ์กฐ์์์ ์ ์ ์๋ค.
-
SequencedCollection์ธํฐํ์ด์ค๋ ์๋์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.interface SequencedCollection<E> extends Collection<E> { // ์ญ์ ์กฐํ SequencedCollection<E> reversed(); // ๊ธฐ์กด Deque์ ๋์ผํ ์ฒซ/๋ง์ง๋ง ์์์ ์์ฑ, ์กฐํ, ์ญ์ void addFirst(E); void addLast(E); E getFirst(); E getLast(); E removeFirst(); E removeLast(); }
-
๋ฐ๋ผ์, ์ด์ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก List์์๋ ๋ช ์์ ์ผ๋ก ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ์์์ ์ ๊ทผ ๋๋ ์ถ๊ฐ/์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ์ถํ ๊ตฌํ์ฒด๋ฅผ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋์ฒดํด๋ ๋ฉ์๋๋ฅผ ์ผ์ผ์ด ์์ ํ์ง ์์๋ ๋๋๋ก ๊ฐ์ ๋์๋ค.
List<String> wordList = new ArrayList<>(); // ์์ฑ wordList.addFirst(element); wordList.addLast(element); // ์กฐํ wordList.getFirst(); wordList.getLast(); // ์ญ์ wordList.removeFirst(); wordList.removeLast();
-
์์ ๊ณ์ธต๋๋ฅผ ํ์ธํด๋ณด๋ฉด, ์งํฉ๊ณผ ๋งต ๊ด๋ จ๋ ์ธํฐํ์ด์ค 2๊ฐ์ง๊ฐ ํจ๊ป ์ถ๊ฐ๋์์์ ์ ์ ์๋ค.
-
SequencedSet์ ๋จ์ํ ์ญ์ ์ปฌ๋ ์ ๋ฐํ ๋ฉ์๋๊ฐ SequencedSet์ ๋ฐํํ๋๋ก ์ฌ์ ์ํ๊ณ ์๋ค.interface SequencedSet<E> extends Set<E>, SequencedCollection<E> { SequencedSet<E> reversed(); }
-
SequencedMap์ ๋จ์ ์์๊ฐ ์๋, key ๊ฐ์ ๋ํ ์์๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์กด์ฌํ๋ฉฐ, ์๋์ ๊ฐ์ ๋ฉ์๋๋ค์ ์ ๊ณตํ๋ค.interface SequencedMap<K,V> extends Map<K,V> { // key ๊ธฐ์ค ์ญ์ ๋งต ๋ฐํ SequencedMap<K,V> reversed(); // key ๊ธฐ์ค ์์ฐจ์ key, value, entry์ ๋ํ collection ๋ฐํ SequencedSet<K> sequencedKeySet(); SequencedCollection<V> sequencedValues(); SequencedSet<Entry<K,V>> sequencedEntrySet(); // ์ฒซ ๋ฒ์งธ, ๋ง์ง๋ง entry์ ์ถ๊ฐ, ์กฐํ, ์ญ์ V putFirst(K, V); V putLast(K, V); Entry<K, V> firstEntry(); Entry<K, V> lastEntry(); Entry<K, V> pollFirstEntry(); Entry<K, V> pollLastEntry(); }
-
oracle ๊ณต์๋ฌธ์์์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ช ์ํ๊ณ ์๋ค.
reversed()ย method provides a reverse-ordered view of the original collection. Any modifications to the original collection are visible in the view. (reversed() ๋ฉ์๋๋ ์๋ณธ ์ปฌ๋ ์ ์ ์ญ์ view๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก, ์๋ณธ ์ปฌ๋ ์ ์ ์์ ์ ์ด view์์๋ ํ์ธํ ์ ์๋ค.) -
์ฆ, ํด๋น ๋ฉ์๋์ ํธ์ถ ์์ ์ ์ ์ญ์ ์ปฌ๋ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ฐํํ๋ ๊ฒ์ด ์๋๋ผ, ๋จ์ํ ์ญ์ ์์ ๋ง ๊ฐ์ง ๋์ผ ๊ฐ์ฒด์ view๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.
-
๋ฐ๋ผ์, ์๋ณธ ๊ฐ์ฒด์ ์์ ์ด reversed()๋ฅผ ํตํด ํ๋ํ ๊ฐ์ฒด์๋ ๋ฐ์๋จ์ ์ฃผ์ํด์ผ ํ๋ค.
