FS_hansol
[Java] Level.3_Trouble Shooting ๋ณธ๋ฌธ
1)Trouble Shooting_์ ๋ค๋ฆญ
๊ตฌํํ๊ณ ์ ํ๋ ๋ถ๋ถ
ArithmeticCalculator ํด๋์ค์์ int, double ๋ฑ ๋ค์ํ ์ซ์ ํ์ ์ ๋ฐ์ ์ ์๋๋ก ์ ๋ค๋ฆญ <T extends Number>๋์ ํ๋ ค๊ณ ํ๋ค.
์ฌ์น ์ฐ์ฐ์ ์ํํ ํ Calculator ๋ถ๋ชจ ํด๋์ค์ ๊ฒฐ๊ด๋ฅด ์ ์ฅํด์ผ ํ๋ค.
๋ฌธ์ ๋ฐ์ : ์ ๋ค๋ฆญ – ํ์ ์ ์จ์ ์ปดํ์ผ๋ฌ
Note: App.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
= ์ซ์ ํ์ ์ด๋ค๊ณ ํด๋๊ณ ์ด๋ค ํ์ ์ธ์ง ์ ์ ํ์์?
๋ฐ์ ์์ธ : ์ ์ธํ ๋ ์ ๋ค๋ฆญ์ธ๋ฐ, ์ธ ๋ ํ์ ์ ์ ์จ์
ArithmeticCalculatorํด๋์ค๋ฅผ ์ ์ธํ ๋ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋๋ก ์ค๊ณํ๋๋ฐ, ์ค์ ์ฌ์ฉํ ๋ ํ์ ์ ๋ช ์ํ์ง ์๊ณ ์์ํ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๊ฑฐ์๋ค.
ArithmeticCalculator ac = new ArithmeticCalculator(operators);
์ด๋ ๊ฒ ์ ๋ค๋ฆญ ์์ด ์ธ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ ํ์ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ unchecked operation๊ฒฝ๊ณ ๋ฅผ ๋์
๊ฐ์ ์ฝ๋
๊ฐ์ ์
// App.java ๋ด ์ ์ธ๋ถ
ArithmeticCalculator ac = new ArithmeticCalculator(operators);
๊ฐ์
// App.java ๋ด ์ ์ธ๋ถ
ArithmeticCalculator<Number> ac = new ArithmeticCalculator<>(operators);
์ด๋ ๊ฒ ๊ฐ์ ํ ์ด์
ArithmeticCalculator<T extends Number>๋ ํ์ ์์ ์ฑ์ ์๊ตฌํ๋ฏ๋ก ์ฌ์ฉ ์ ๋ฐ๋์ ํ์ ๋ช ์๊ฐ ํ์ํ๋ค.
Number๋ Integer, Double, Long, Float ๋ฑ ๋ชจ๋ ์ซ์ ๋ํผํด๋์ค์ ์ต์์ ํ์ ์ด๋ค.
๋ฐ๋ผ์ <Number>๋ก ์ ์ธํ๋ฉด ๋ค์ํ ์ซ์ ํ์ ์ ๋ค๋ฃฐ ์ ์๊ณ ์ปดํ์ผ๋ฌ์๊ฒ ์ซ์ํ์ ๋ง ์ธ ๊ฒ์ ๋ช ํํ๊ฒ ์๋ ค์ฃผ๋ ํจ๊ณผ๋ ์๋ค.
2)Trouble Shooting_.stream() ์ ๋ถ์ด๊ณ .filter() ์จ์ ํฐ์ง
๊ตฌํํ๊ณ ์ ํ๋ ๋ถ๋ถ
์ ์ฅ๋ ์ฐ์ฐ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์์ ์ ๋ ฅ๊ฐ๋ณด๋ค ํฐ ๊ฐ๋ง ํํฐ๋งํ๊ณ ์ถ๋ ฅํ๊ณ ์ถ์๋ค.
๋ฌธ์ ๋ฐ์
getResults().filter(r -> r > threshold); // ์๋ฌ ๋ฐ์
"List์ filter ๋ชป ์จ์~ ์ด๊ฑด Stream ์ ์ฉ์ด์์!"
๋ฐ์์์ธ
filter()๋ Stream ๊ฐ์ฒด์์๋ง ํธ์ถ ๊ฐ๋ฅํ ๋ฉ์๋๋ค.
getResults)๋ List<Double>์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก .filter()๋ฅผ ๋ถ์ผ ์ ์๋ค.
.stream()์ ์ ๋ถ์ด๊ณ ๋ฐ๋ก filter()๋ฅผ ์ฐ๋ฉด ์๋ฌ ๋ฐ์๋๋ค.
filter()๋ ๋ฆฌ์คํธ๊ฐ ์๋๋ผ Stream์์๋ง ์ธ ์ ์๋ ๊ธฐ๋ฅ
๊ฐ์ ์ฝ๋
๊ฐ์ ์
getResults().filter(r -> r > threshold); // ์ปดํ์ผ ์๋ฌ
๊ฐ์
getResults().stream().filter(r -> r > threshold);
์ด๋ ๊ฒ ๊ฐ์ ํ ์ด์
List๋ ์ปฌ๋ ์ ์ด์ง๋ง, Stream์ ํ๋ฆ์ด๊ธฐ ๋๋ฌธ์ .filter(), .map(), .forEach() ๋ฑ์ stream์ ํตํด์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
3)Trouble Shooting_๋๋ค ๋ฌธ๋ฒ
r-> r>threshold
๊ตฌํํ๊ณ ์ ํ๋ ๋ถ๋ถ
for ๋ฐ๋ณต๋ฌธ ๋์ ๋๋ค์์ผ๋ก ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ๋ค๋ง ์ถ๋ ฅํ๊ณ ์ถ์๋ค.
๋ฌธ์ ๋ฐ์
.filter(r => r > threshold); // ์๋ฌ ๋ฐ์
๋๋ค์ ๋ฌธ๋ฒ์ Java๋ฌธ๋ฒ์ด ์๋ JavaScript ์คํ์ผ(ํ์ดํํจ์)๋ก ์๋ชป ์ฌ์ฉํ๋ค.
Java์์๋ ๋ฐ๋์ r-> r > threshold๊ฐ ์ฌ๋ฐ๋ฅธ ํํ์ด๋ค.
๊ฐ์ ์ฝ๋
๊ฐ์ ์
.filter(r => r > threshold); // ๋ฌธ๋ฒ ์ค๋ฅ
๊ฐ์ ํ
.filter(r -> r > threshold);
์ด๋ ๊ฒ ๊ฐ์ ํ ์ด์
Java ๋๋ค์์ ์ ๋ ฅ๊ฐ-> ์คํ๋ฌธ ํํ์ด๊ธฐ ๋๋ฌธ์ด๋ฉฐ
r-> r >threshold๋ r์ด๋ผ๋ ๊ฐ์ ๋ฐ์์ ์กฐ๊ฑด ๋น๊ต๋ง ํ๋ ํจ์๋ค.
3)Trouble Shooting_List<Double> vs Stream<Double> ์ฐจ์ด๋ฅผ ๋ชจ๋ฆ
๊ตฌํํ๊ณ ์ ํ๋ ๋ถ๋ถ
๋ฆฌ์คํธ์์ ํน์ ์กฐ๊ฑด์ ๊ฐ๋ง ๊ฑธ๋ฌ์ ์ถ๋ ฅํ๊ณ ์ถ์๋ค.
๋ฌธ์ ๋ฐ์
List<Double> results = getResults();
results.filter(r -> r > 10);
//getResults(); <= ์ด๊ฒ ์ ๋๋ ๊ฑฐ์ง?..
๋ฐ์์์ธ
List๋ ํํฐ๋ง ๊ธฐ๋ฅ์ด ์๋ค.
filter()๋ Stream๊ฐ์ฒด์์๋ง ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค.
List์ Stream์ ๊ตฌ๋ถํ์ง ๋ชปํด์ ํผ์ฉ ์ฌ์ฉํ๋ค..
์ผ๋จ ์ ๋๋ ๊ฑด์ง ๋ชจ๋ฆ
- ArithmeticCalculator๋ Calculator๋ผ๋ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์๋ฐ์๊ธฐ ๋๋ฌธ์
- ๋ถ๋ชจ์ ์๋ getResults() ๋ฉ์๋๋ฅผ ๊ทธ๋ฅ ์ธ ์ ์์
๊ฐ์ ์ฝ๋
๊ฐ์ ์
List<Double> results = getResults();
results.filter(r -> r > 10);
๊ฐ์ ํ
List<Double> results = getResults().stream()
.filter(r -> r > 10)
.toList();
'Spring_๋ถ์บ > Trouble Tang Tang ๐ซ๐ซ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Trouble Gradle (0) | 2025.08.20 |
---|---|
[Spring] newfeedproject_Trouble Shooting(auth) (1) | 2025.08.09 |
[Java] Level.2_Trouble Shooting (0) | 2025.07.14 |
[Java] Level.1_Trouble Shooting (3) | 2025.07.10 |
[Spring] 2์ฃผ์ฐจ-clone trouble (1) | 2025.07.09 |