๊ด€๋ฆฌ ๋ฉ”๋‰ด

FS_hansol

[Java] Level.3_Trouble Shooting ๋ณธ๋ฌธ

Spring_๋ถ€์บ /Trouble Tang Tang ๐Ÿ”ซ๐Ÿ”ซ

[Java] Level.3_Trouble Shooting

FS29 2025. 7. 17. 10:18

 

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