์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- ๋ถํ ์ ๋ณต
- ์๋ฎฌ๋ ์ด์
- ๋งต
- Reversing
- Spring
- java
- JPA
- ์ต๋จ ๊ฒฝ๋ก
- ๊ตฌํ
- DP
- ๊ทธ๋ฆฌ๋
- ์ด๋ถ ํ์
- ์ฐ์ ์์ ํ
- ์คํ
- BFS
- ๋ฌธ์์ด
- ์ฌ๊ท
- ์์ ์ ๋ ฌ
- error
- GCP
- c++
- web
- CVE
- dynamic debugging
- ๋ฐฑํธ๋ํน
- OS
- thymeleaf
- ๋ฐ์ดํฌ์คํธ๋ผ
- ๋์ ํฉ
- dfs
- Today
- Total
hades
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ์ปฌ๋ ์ API ๊ฐ์ ๋ณธ๋ฌธ
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ์ปฌ๋ ์ API ๊ฐ์
hades1 2024. 9. 20. 00:10์ปฌ๋ ์ ํฉํ ๋ฆฌ
์๋ฐ์์ ์ ์ ์์๋ฅผ ํฌํจํ๋ ๋ฆฌ์คํธ๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค๊น?
List<String> friends = new ArrayList<>();
friends.add("์งฑ๊ตฌ");
friends.add("๋งน๊ตฌ");
friends.add("์ฒ ์");
์ธ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ๋ฐ๋ ๊ท์ฐฎ๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ค์ผ ์ ์๋ค.
List<String> friends = Arrays.asList("์งฑ๊ตฌ", "๋งน๊ตฌ", "์ฒ ์");
friends.add("ํ์ด"); // ์๋ฌ ๋ฐ์
๊ณ ์ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์์ผ๋ฏ๋ก, ์์๋ฅผ ๊ฐฑ์ ํ ์๋ ์์ง๋ง, ์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์๋ ์๋ค.
UnsupportedOperationException ์์ธ ๋ฐ์
๋ด๋ถ์ ์ผ๋ก ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฐฐ์ด๋ก๋ถํฐ ๊ตฌํ๋์๊ธฐ ๋๋ฌธ์ ์ด์ ๊ฐ์ ์ผ์ด ์ผ์ด๋๋ค.
์งํฉ์ ๊ฒฝ์ฐ๋ฅผ ์์๋ณด์. ์งํฉ์์๋ Arrays.asSet()์ด ์์ผ๋ฏ๋ก, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ค.
Set<String> friends = new HashSet<>(Arrays.asList("์งฑ๊ตฌ", "๋งน๊ตฌ", "์ฒ ์"));
Set<String> friends = Stream.of("์งฑ๊ตฌ", "๋งน๊ตฌ", "์ฒ ์").collect(Collectors.toSet());
๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์์ฐ์ค๋ฝ์ง ๋ชปํ๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก ๋ถํ์ํ ๊ฐ์ฒด ํ ๋น์ ํ์๋ก ํ๋ค.
๋ฆฌ์คํธ ํฉํ ๋ฆฌ
List.of ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค ์ ์๋ค.
List<String> friends = List.of("์งฑ๊ตฌ", "๋งน๊ตฌ", "์ฒ ์");
System.out.println(friends); // [์งฑ๊ตฌ, ๋งน๊ตฌ, ์ฒ ์]
ํ์ง๋ง, ์ด ๊ฒฝ์ฐ์๋ ์์๋ฅผ ์ถ๊ฐํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ด ๊ฒฝ์ฐ์๋ ๋ณ๊ฒฝํ ์ ์๋ ๋ฆฌ์คํธ๊ฐ ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ด๋ค. set() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์์ดํ ์ ๋ฐ๊พธ๋ ค๊ณ ํด๋ ๊ฐ์ ์์ธ๊ฐ ๋ฐ์ํ๋ค. ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ด ๋์ ๊ฒ๋ง์ ์๋๋ค. ์๋์น ์๊ฒ ๋ณํ๋ ๊ฒ์ ๋ง์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง, ์์๊ฐ ๋ฐ๋๋ ๊ฒ์ ๋ง์ ๋ฐฉ๋ฒ์ ์๋ค.
Person person = new Person();
person.setName("์งฑ๊ตฌ");
List<Person> people = List.of(person);
for (Person person1 : people) {
System.out.println(person1.getName());
}
person.setName("์ฒ ์");
for (Person person1 : people) {
System.out.println(person1.getName());
}
๋ฆฌ์คํธ๋ฅผ ๋ฐ๊ฟ์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ์ง์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๋ฉด ๋๋ค.
๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์์ ์ค์ ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ ํ์๊ฐ ์๋ค๋ฉด ์ฌ์ฉํ๊ธฐ ๊ฐํธํ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
์งํฉ ํฉํ ๋ฆฌ
List.of์ ๋น์ทํ ๋ฐฉ๋ฒ์ผ๋ก ์ถ๊ฐ ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ ์งํฉ์ ๋ง๋ค ์ ์๋ค.
Set<String> friends = Set.of("์งฑ๊ตฌ", "๋งน๊ตฌ", "์ฒ ์");
System.out.println(friends);
๋งต ํฉํ ๋ฆฌ
๋งต์ ๋ง๋ค๊ธฐ ์ํด์๋ ํค์ ๊ฐ์ด ์์ด์ผ ํ๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ Map.of ํฉํ ๋ฆฌ ๋ฉ์๋์ ํค์ ๊ฐ์ ๋ฒ๊ฐ์ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋งต์ ๋ง๋ค ์ ์๋ค.
Map<String, Integer> ageOfFamily = Map.of("์งฑ๊ตฌ", 5, "ํ๋ง", 30, "๋ฏธ์ ", 27);
System.out.println(ageOfFamily);
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ํธ๋ฆฌ๊ฐ ๋ง์์ง๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค. Map.ofEntries๋ฅผ ์ฌ์ฉํ์ฌ ๋งต์ ์์ฑํ ์ ์๋ค.
Map<String, Integer> ageOfFaimily = Map.ofEntries(Map.entry("์งฑ๊ตฌ", 5),
Map.entry("ํ๋ง", 30),
Map.entry("๋ฏธ์ ", 27));
๋ฆฌ์คํธ์ ์งํฉ ์ฒ๋ฆฌ
- removeIf : ํ๋ ๋์ผ์ดํธ๋ฅผ ๋ง์กฑํ๋ ์์๋ฅผ ์ ๊ฑฐํ๋ค. List๋ Set์ ์ธํฐํ์ด์ค๋ก ๊ฐ์ง๋ ํด๋์ค์์ ์ด์ฉํ ์ ์๋ค.
- replaceAll : ๋ฆฌ์คํธ์์ ์ด์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ผ๋ก, UnaryOperator ํจ์๋ฅผ ์ด์ฉํ์ฌ ์์๋ฅผ ๋ฐ๊พผ๋ค.
- sort : List ์ธํฐํ์ด์ค์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก, ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ๋ค.
์ ๋ฉ์๋๋ค์ ํธ์ถํ ์ปฌ๋ ์ ์์ฒด๋ฅผ ๋ฐ๊พผ๋ค. ์คํธ๋ฆผ์ ์๋ก์ด ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ง๋ง, ์ ๋ฉ์๋๋ค์ ๊ธฐ์กด ์ปฌ๋ ์ ์ ๋ฐ๊พผ๋ค. ์ปฌ๋ ์ ์ ๋ฐ๊พธ๋ ๋์์ ์๋ฌ๋ฅผ ์ ๋ฐํ๋๋ฐ, ์ ์ถ๊ฐ๋ ๊ฒ์ผ๊น?
removeIf ๋ฉ์๋
์์์ ๋ณด์๋ List.of๋ก ๋ง๋ค์ด์ง ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ์ ๋, ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ConcurrentModificationException ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
List<Person> people = new ArrayList<>();
people.add(new Person("์ ์งฑ๊ตฌ"));
people.add(new Person("๊น์ฒ ์"));
people.add(new Person("๋งน๊ตฌ"));
for (Person person : people) {
if ("์ ".equals(person.getName().substring(0, 1))){
people.remove(person);
}
}
for-each ๋ฃจํ๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๋ค์ฌ๋ค๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
for (Iterator<Person> iterator = people.iterator(); iterator.hasNext();){
Person person = iterator.next();
if ("์ ".equals(person.getName().substring(0, 1))){
people.remove(person);
}
}
๋ฐ๋ณต์ ๊ฐ์ฒด์ ์ปฌ๋ ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ์ปฌ๋ ์ ์ ๊ด๋ฆฌํ๊ณ ์๋๋ฐ, ์ด ๋์ ์ํ๊ฐ ๋๊ธฐํ๋์ง ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฅผ removeIf๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
people.removeIf(person -> "์ ".equals(person.getName().substring(0, 1)));
for (Person person : people) {
System.out.println(person.getName());
}
// ๊น์ฒ ์
// ๋งน๊ตฌ
replaceAll ๋ฉ์๋
์ด์ ๊ฐ์ ์๋ฆฌ๋ก replaceAll์ ์ฌ์ฉํ์ฌ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
people.replaceAll(person -> new Person(person.getName().substring(1)));
for (Person person : people) {
System.out.println(person.getName());
}
์ค์ํ ๊ฒ์ ์์๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ด๋ค. ์์์ ์์ฑ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
๋งต ์ฒ๋ฆฌ
forEach ๋ฉ์๋
๋งต์์ ํค์ ๊ฐ์ ๋ฐ๋ณตํ๋ฉด์ ์ฌ์ฉํ๋ ์์ ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค.
Map<String, Integer> ageOfPeople = new HashMap<>();
ageOfPeople.put("์งฑ๊ตฌ", 5);
ageOfPeople.put("์ฒ ์", 5);
for (Map.Entry<String, Integer> entry : ageOfPeople.entrySet()) {
String person = entry.getKey();
Integer age = entry.getValue();
System.out.println(person + "is " + age + "years old."
}
์๋ฐ 8์์๋ถํฐ ํค์ ๊ฐ์ ์ธ์๋ก ๋ฐ๋ BiConsumer๋ฅผ ์ด์ฉํ forEach ๋ฉ์๋๋ฅผ ์ง์ํ๋ฏ๋ก ์ฝ๋๋ฅผ ๋ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค.
ageOfPeople.forEach((person, age) -> System.out.println(person + "is " + age + "years old."));
์ ๋ ฌ ๋ฉ์๋
- Entry.comparingByValue
- Entry.comparingByKey
Map<String, String> favouriteMovies = Map.ofEntries(Map.entry("Raphael", "Start Wars")
, Map.entry("Cristina", "Matrix")
, Map.entry("Olivia", "James Bond"));
favouriteMovies.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEachOrdered(System.out::println);
getOrDefault ๋ฉ์๋
System.out.println(favouriteMovies.getOrDefault("Olivia", "Home Along")); // James Bond
System.out.println(favouriteMovies.getOrDefault("Mattew", "Home Along")); // Home Along
์ญ์ ํจํด
remove๋ ํค์ ํด๋นํ๋ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ค. ์๋ฐ 8์์๋ ์ง์ ํ ํค์ ๊ฐ์ด ์ผ์นํด์ผ ์ญ์ ํ๋ ์ค๋ฒ๋ก๋๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
favouriteMovies.remove(key, value);
๊ต์ฒด ํจํด
replaceAll์ ๊ฐ ํญ๋ชฉ์ ๊ฐ์ ๊ต์ฒดํ๋ค.
favouriteMovies.replaceAll((person, movie) -> movie.toUpperCase());
System.out.println(favouriteMovies);
ConcurrentHashMap
ConcurrentHashMap ํด๋์ค๋ ๋์์ฑ ์นํ์ ์ด๋ฉด์, ์ต์ ๊ธฐ์ ์ ๋ฐ์ํ HashMap ๋ฒ์ ์ด๋ค. ๋ด๋ถ ์๋ฃ๊ตฌ์กฐ์ ํน์ ๋ถ๋ถ๋ง ์ ๊ถ ๋์ ์ถ๊ฐ, ๊ฐฑ์ ์์ ์ ํ์ฉํ๋ค.
์ฐ์ฐ
- forEach : ๊ฐ๊ฐ์ ๋ํด ์ฃผ์ด์ง ์ก์ ์ ์คํ
- reduce : ๋ฆฌ๋์ค ํจ์๋ฅผ ์ด์ฉํด ๊ฒฐ๊ณผ๋ก ํฉ์นจ
- search : ๋์ด ์๋ ๊ฐ์ ๋ฐํํ ๋๊น์ง ๊ฐ๊ฐ์ ํจ์ ์ ์ฉ
์ 3๊ฐ์ง ๊ธฐ๋ณธ ์ฐ์ฐ์ ๋ฐํ์ผ๋ก, ์๋ฌด๊ฒ๋ ์๋ถ์ผ๋ฉด (ํค, ๊ฐ)์ ๋ํด์, Key๊ฐ ๋ถ์ผ๋ฉด ํค์ ๋ํด์๋ง, Value๊ฐ ๋ถ์ผ๋ฉด ๊ฐ์ ๋ํด์๋ง, Entry๊ฐ ๋ถ์ผ๋ฉด Map.entry ๊ฐ์ฒด๋ก ์ฐ์ฐํ๋ค.
์ด๋ค ์ฐ์ฐ์ ConcurrentHashMap์ ์ํ๋ฅผ ๋ณํ์ํฌ ์ ์๊ธฐ ๋๋ฌธ์, ์ด๋ค ์ฐ์ฐ์ ์ ๊ณต๋๋ ํจ์๋ ๋ณํ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
์ด๋ค ์ฐ์ฐ์ ๋ณ๋ ฌ์ฑ ๊ธฐ์ค๊ฐ์ ์ง์ ํด์ผ ํ๋ค. ๋งต์ ํฌ๊ธฐ๊ฐ ์ฃผ์ด์ง ๊ธฐ์ค๊ฐ๋ณด๋ค ์์ผ๋ฉด ์์ฐจ์ ์ผ๋ก ์ฐ์ฐ์ ์คํํ๋ค. ๊ธฐ์ค๊ฐ์ 1๋ก ์คํํ๋ฉด, ๊ณตํต ์ค๋ ๋ ํ์ ์ด์ฉํด ๋ณ๋ ฌ์ฑ์ ๊ทน๋ํํ๋ค. Long.MAX_VALUE๋ฅผ ๊ธฐ์ค๊ฐ์ผ๋ก ์ค์ ํ๋ฉด, ํ๊ฐ์ ์ค๋ ๋๋ก ์ฐ์ฐ์ ์คํํ๋ค.
ConcurrentHashMap<String, Long> map = new ConcurrentHashMap<>();
long parallelismThreshold = 1;
Optional<Long> maxValue = Optional.ofNullable(map.reduceValues(1, Long::max));
๊ณ์
ConcurrentMap ํด๋์ค๋ ๋งต์ ๋งคํ ๊ฐ์๋ฅผ ๋ฐํํ๋ mappingCount ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. size์ ๋น์ทํ์ง๋ง long ํํ๋ก ๋ฐํํ์ฌ ๋ฒ์๊ฐ ๋ ๋๋ค.
์งํฉ ๋ทฐ
HashMap์์ keySet์ ์งํฉ ๋ทฐ์ด๋ค. map.keySet()์ ํ๊ฒ ๋๋ฉด, map์ ์๋ ํค๋ค๋ก ์งํฉ ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๋ค. ์งํฉ์ ๋ฐ๊พธ๋ฉด, map๋ ๋ณํํ๊ณ , map์ ๋ฐ๊พธ๋ฉด ์งํฉ๋ ๋ณํํ๋ค.
ConcurrentHashMap์ ์ ์งํ๊ธฐ ์ํด์๋ newKeySet ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
'๐๐ปโโ๏ธ ๊ธฐ๋ณธํ๋ จ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] null ๋์ Optional ํด๋์ค (0) | 2024.09.23 |
---|---|
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ๋ณ๋ ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฑ๋ฅ (0) | 2024.09.19 |
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ์คํธ๋ฆผ (1) | 2024.09.05 |
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ๋๋ค ํํ์ (0) | 2024.09.04 |
[๋ชจ๋ ์๋ฐ ์ธ ์ก์ ] ๋์ ํ๋ผ๋ฏธํฐํ ์ฝ๋ ์ ๋ฌํ๊ธฐ (0) | 2024.09.03 |