์ฝํ
๋ฅผ ํ๋ ๋๋ ๋ณดํต ์์ For๋ฌธ์ ํ์ฉํด์ ๋ฐ๋ณต๋ฌธ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค! ์ด์ ๋... ์คํธ๋ฆผ์ ๋ํด์ ์ ๋ชฐ๋๊ธฐ ๋๋ฌธ!
๊ทธ๋ฐ๋ฐ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ์ดํด๋ณด๋ค๋ณด๋ฉด stream์ด๋ผ๋ api๋ฅผ ํตํด ์์ฃผ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ฌ๋๋ค์ด ๋ง์๋ค. (ํ์ค์ข..)
๊ทธ๋์ for๋ฌธ๊ณผ stream์ ์ฐจ์ด๊ฐ ๋ฌด์์ธ์ง ๊ถ๊ธํด์ ธ์ ์ฌ๋ฌ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๊ณ ์ด๋ ๊ฒ ์ ๋ฆฌํ๊ฒ ๋์๋ค.
(๋ชจ๋ ์๋ฃ๋ค์ ์๋ ์ถ์ฒ๋ค์์ ๋ฐ์ทํ์์ ์ฌ์ ์ ๋ฐํ๋๋ค!)
์์ for๋ฌธ | ํฅ์๋ for๋ฌธ | stream | |
---|---|---|---|
ํ์ | for(์ด๊ธฐํ ; ์กฐ๊ฑด ; ํ์ฒ๋ฆฌ) | for( Integer i : list) | stream ์์ฑ -> ์ค๊ฐ ์ฐ์ฐ -> ์ต์ข ์ฐ์ฐ |
๋ฑ์ฅ ์๊ธฐ | java1๋ถํฐ | java5 ๋ถํฐ ๋ฑ์ฅ | java8๋ถํฐ ๋ฑ์ฅ |
ํน์ง | ๋์ฒด๋ก ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ์ ๋ณด์ | ๊ฐ๋ ์ฑ & ์์ ์ฑ ์ฆ๊ฐ | ๊ฐ๋ ์ฑ ์ฆ๊ฐ |
// ์ ํต์ ์ธ for๋ฌธ
public static void mian(String[] args){
List<Integer> list = List.of(1,2,3,4,5);
for(int i = 0 ; i <list.size(); i ++){
System.out.println(list.get(i));
}
}
์ ํ์ ์ธ for ๋ฌธ์ด๋ค!
//for each
public static void main(String[] args){
List<Integer> list = List.of(1,2,3,4,5);
for(Integer i : list){
System.out.println(i);
}
}
์ ํต ๋ฐฉ์์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฌ๋ค๋ณด๋ฉด java.lang.IndexOutOfBoundsException: Index: 6, Size: 5
์ ๊ฐ์ ๋ด๋ถ ์ธ๋ฑ์ค๋ฅผ ๋ฒ์ด๋๋ ๋ฐ๋ณต๋ฌธ ์ฒ๋ฆฌ์ ๋ํด์ ์ด๋ฐ ์๋ฌ๋ฅผ ๋ง์ฃผ์น ์ ์ด ๊ผญ ์์ํ
๋ฐ, ํฅ์๋ for each๋ฌธ์ ์ด๋ฌํ ์๋ฌ๋ฅผ ๋ง์ฃผ์น ์ผ์ด ์๋ค.
๋ฐฐ์ด ํน์ ๋ฆฌ์คํธ์ ์ธ๋ฑ์ค๋ก ๋ฐ๋ณต์ ์งํํ๋ ๊ฒ์ด ์๋๋ผ, ๋ด๋ถ ์์๋ค์ ๋ชจ๋ ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ.
๊ทธ๋์ ์์ ์ฑ
์ด ์ฆ๊ฐ๋๋ค๊ณ ํํํ๋ค.
//stream
public void introduceStream(List<Integer> numbers){
return numbers.stream()
.filter(number -> number > 5)
.map(Distance::new)
.collect(Collectors.toList());
}
java8 ๋ถํฐ ๋ฑ์ฅํ stream์ ํํ.
stream ์์ฑ -> ์ค๊ฐ ์ฐ์ฐ -> ์ต์ข
์ฐ์ฐ
์ ํํ๋ก ์์ฑํจ.
๐ต๏ธโโ๏ธ for๊ณผ stream์ ๊ณตํต์ , ๊ทธ๋ ๋ค๋ฉด ๋ญ ์ฌ์ฉํด์ผํ๋์?
for ๊ณผ stream์ ๋ค๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์ ์ฌ์ฉํ๋ค๋ ๊ณตํต์ ์ด ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ์ํฉ์์ ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผ ํ ๊น?
์คํธ๋ฆผ์ ํจ์๊ฐ์ฒด๋ก ํํ๋๋ฉฐ, ๋๋ค์์ด๋ ๋ฉ์๋ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํจ.
์ด๋ ํํ์ ๊ฐ๊ฒฐํ๊ฒ ํด์ค
๊ทธ๋ฌ๋, ๋๋ค์์ด๊ธฐ ๋๋ฌธ์ ์ธ๋ถ๋ณ์(์ง์ญ ๋ณ์)๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ์ ์๋ค๋ ๋จ์ ์ด ์กด์ฌ
. ์ด์ ๊ด๋ จํด์๋ ์ฌ๊ธฐ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ค๋ช
์ด ์ ๋์์๋ค!
public int subtractByFor(int baseNumber , List<Integer> numbers){
for(int number: numbers){
if(number % 2 ==0){
baseNumber -= number;
}
}
return baseNumber;
}
public int subtractByStream(int baseNumber, List<Integer> numbers){
numbers.stream()
.filter(number -> number % 2 ==0)
.forEach(number -> baseNumber -= number); // ์ปดํ์ผ ์๋ฌ
return baseNumber;
}
์ด ์ธ์๋.. stream์ continue
, break
๋ฅผ ์ด์ฉํ ๋ก์ง์ ์ฌ์ฉ ๋ถ๊ฐ!
์ด๋ ๊ฒ ๋ณด๋ฉด ์กฐ๊ธ ์ด๋ ค์ธ ์ ์๋๋ฐ, ์ค์ ๊ฐ๋จํ ๊ฐ๋ ์ด๋ค!
public int byFor(List<Integer> numbers) {
Set<Integer> duplicationRemoved = new HashSet<>();
for(int number : numbers){
duplicationRemoved.add(number);
}
return duplicationRemoved.size();
}
How(์ด๋ป๊ฒ)
์ค์ฌ์ผ๋ก ์ธ๋ถ์ ๋ก์ง์ด ๋
ธ์ถ๋๋ ๊ตฌ์กฐ => ์ธ๋ถ๋ฐ๋ณต
!public int byStream(List<Integer> numbers) {
return (int) numbers.stream()
.distinct()
.count();
}
what(๋ฌด์์)
์ค์ฌ์ผ๋ก ์ถ์ํ๋ ๋ฉ์๋๋ค, ๋ก์ง์ด ๋
ธ์ถ๋์ง ์์ => ๋ด๋ถ๋ฐ๋ณต
!์... ๋์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
์ฐํ ์ฝ ํ ์ฝํก ๋ฐํ ์๋ฃ๋ฅผ ์บก์ณ๋ณธ์ธ๋ฐ, ํ์คํ for๋ฌธ๊ณผ if๋ฌธ์ด ์ค์ฒฉ๋ for๋ฌธ๋ณด๋ค stream์ ๊ฐ๋ ์ฑ์ด ์ข์๋ณด์ธ๋ค.
ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ stream์ด ํญ์ ๊ฐ๋
์ฑ์ด ์ข์๊ฒ๋ ์๋๋ค.
์ ์์์์๋ ์คํ๋ ค stream์ ์ด์ฉํ ์ฒด์ด๋ ๋ฐฉ์๋ณด๋ค ๊ณ ์ ์ด์คfor๋ฌธ ๋ฐฉ์์ด ๊ฐ๋ ์ฑ์ด ์ข๋ค.
๊ฒ์ผ๋ฅธ(์ง์ฐ) ์ฐ์ฐ
์ ํน์ฑ ๋๋ฌธ์ ๋ผ์ธ์ ๋ฐ๋ฅธ ์์ฐจ์ ์ธ ์๋ฌ ํธ๋ ์ด์ฑ์ด ์ด๋ ค์ ์ฑ๋ฅ์ ๋ณดํต stream
๋ณด๋ค๋ for-loop
๊ฐ ์ข์ํธ์ด๋ค. ํนํ ์์ํ์
์ ๋ฐ์ดํฐ
๋ฅผ ์ฒ๋ฆฌํ ๋๋ ์ ์๋ฃ์ ๋์์๋ ์ ๋๋ก ์๋์ ์ผ๋ก ์๋ฑํ๋ค.
๊ทธ ์ด์ ๋ for-loop
์ ๊ฐ๋
์์ฒด๋ ๋์จ์ง ์ด๋ฏธ ์ค๋๋์๊ณ , ์ญ์๋
๊ฐ JVM์์ ๋ด๋ถ ์ต์ ํ๊ฐ ์ ๋์ด์๋ค. ํํธ stream
์ java8์ด ์ถ์๋ 2015๋
๋๋ถํฐ ๋์จ ๊ฐ๋
์ด๊ธฐ๋๋ฌธ์, ์ต์ ํ๊ฐ for-loop์ ๋นํด์ ์ ๋์ด์์ง ์์๊ฒ์ด๋ค.
ArrayList์ ๊ฐ์ ์ฐธ์กฐ ๋ฐ์ดํฐ ํ์์์ for๋ฌธ๊ณผ stream์ ์๊ฐ ์ฐจ์ด๋ ํฌ๊ฒ ๋์ง ์๋๋ค. (๋ฌผ๋ก for๋ฌธ์ด ๋ฏธ์ธํ๊ฒ ๋ ์ข๊ธฐ๋ ํ๋ค.)
ํจ์ ๋ด๋ถ์ ์๊ฐ ๋ณต์ก๋๊ฐ ์ถฉ๋ถํ ํด๋(๋ฐ์ดํฐ์ ์์ด ๋ฐฉ๋ํ ๋)๋ for๋ฌธ๊ณผ stream์ ์๋ ์ฐจ์ด๊ฐ ๊ฑฐ์ ๋ฏธ๋ฏธํ๋ค.
์ ๋ฆฌํ์๋ฉด, ์์ํ์ ์ ๋ฐ์ดํฐ๋ง์ ๋ฐ๋ณตํ๊ณ ์ถ์ ๋๋ ๋ฌด์กฐ๊ฑด for๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ์ข๋ค.
๋ํ ์ฃผ์๊ฑฐ๋์ ๊ฐ์ ์ํฉ์์๋ ์ฑ๋ฅ์ด ์ต์ฐ์ ๊ฐ์น์ด๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ๊ฐ์ฅ ๋น ๋ฅธ๊ฒ์ด ๋ณด์ฅ๋๋ for๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๊ทธ๋ฌ๋ ๋ฐ์ดํฐ์ ์์ด ๋ง๊ฑฐ๋(์๊ฐ ๋ณต์ก๋๊ฐ ์ปค์ง๊ฑฐ๋)
์ฐธ์กฐ ํ์
์ ๋ฐ๋ณต
ํ๊ณ ์ถ์๋๋ stream์ ์ฌ์ฉํด๋ ์ฑ๋ฅ์์ ์ด์๊ฐ ํฌ๊ฒ ์ฐจ์ด๋์ง ์๋๋ค.
๊ทธ๋ผ.. ์ด๋ฌ๋ ์ ๋ฌ๋ for๋ฌธ์ด ์ข์๊ฒ ๊ฐ์๋ฐ stream ์ฐ์ง ๋ง๊ณ for๋ง ์จ์ผํ๋๊ฑฐ ์๋์์? ๋ผ๋ ์๋ฌธ์ด ๋ค์๋ ์๋ค.
์ค๋ฌด์ ์ธ ๋ถ๋ถ์์ ๊ฐ๋
์ฑ
๊ณผ ์ ์ง๋ณด์
์ธก๋ฉด์์๋ stream์ ์ฌ์ฉํ์ ๋ ๊ฐ๋ ์ด์ ๋ ํด ๊ฒ์ด๋ค.
์ค์ ๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํ ๋ ์ ์ง๋ณด์
์ ๋ค์ด๊ฐ๋ ๋น์ฉ์ด ๊ฐ์ฅ ํฌ๋ค๊ณค ํ๋๊น ๋ง์ด๋ค.
์ฆ, ํ์ฌ ์ด๋ค ํ๊ฒฝ์ ์ฒํด์๋์ง์ ๋ชฉ์ ์ด ๋ฌด์์ธ์ง๋ฅผ ํ์ ํ๊ณ ๋ฐ๋ณต๋ฌธ์ ํ์ฉํ๋ ๊ฒ์ด ํ์ํ๋ค.
์ฐธ๊ณ ์๋ฃ
์ข์ ๊ธ ๊ฐ์ฌํฉ๋๋ค. ์์ฃผ ์ฌ๊ฒ์ :)