for : 반복문
코드에서 반복적인 작업을 한다면 늘 봐왔던 for문과 while문
오늘은 그중에서 for문에 대해 적어보려 한다.
for(int i = 0; i < loop.size; i++{
// 반복할 문장
}
foreach : 확장 포문
기본적으로 사용하는 반복문이다. 그러나 오늘은 자바 5.0부터 사용할 수 있는 foreach 즉 확장 for문을 알아보련 한다.
기본 작성방법은 아래와 같다
// for(타입 변수명 : 콜렉션명){
for(Integer data : arrlist){
// 반복할 코드
}
여기서 타입은 콜렉션명에서 하나의 인자를 꺼내올때의 타입과 동일하게 하면 된다 즉, ArrayList<Integer> 라면 Integer 변수명 으로 사용하면 된다.
이는 위의 반복문과 같은 사용법이면서 증감식을 사용하는것이 아니라, 콜렉션이 가지고 있는 인자의 수만큼 사용할 수 있기 때문에 보다 간결하게 작성 할 수 있다.
단, 값을 가져다 사용만 할 수 있고 수정이 불가능 하고, 역순으로 탐색을 할수 없으니 수정이 필요한 작업이라면 이 확정 포문은 확인 후 사용하는것이 좋다!
List.forEach()
※ 여기서 확장포문인 foreach와 ArrayList에 들어있는 forEach의 차이도 알아보자!
리스트를 반복문과 확장포문으로 사용할 수 있지만 리스트안에 반복을 할 수 있는 메소드가 있다는것 아셨나요?
바로 아래와 같은 forEach입니다.
List<Integer> arrList = new ArrayList<>();
arrList.add(1);
arrList.add(2);
arrList.add(3);
// 1번 방식
Consumer<Integer> lambda = intData -> System.out.println("arrList Data : " + intData);
arrList.forEach(lambda);
System.out.println();
System.out.println("다른 방식의 forEach문");
System.out.println();
// 2번 방식
arrList.forEach(intData -> System.out.println("arrList Data : " + intData));
1번 방식은 forEach의 매개변수타입이 Consumer이기 때문에 한번더 타입을 만들어주는 방식이고,
2번 방식은 위의 작업을 더 간략히 적은 람다식이다.
이 방법을 사용하는 이유는 원래 인덱스를 사용해서 값을 가져오는데 그러면 원하는 인덱스까지 검색을 해야하는 시간이 걸린다. 그러나 이 forEach문은 iterator를 이용하여 요소를 순회하기 때문에 모든상황에서 유연하게 대체할 수 있다.
하지만 이에 대한 단점도 있다.
1. 디버깅 (오류 확인)에 대한 내용은 같은 오류라도 나오는 문구가 다르다.
이것이 오류가 하나가 아니라 복잡한 구조에서 여러 오류가 났다면 확인하기가 더욱 어렵다.
2. 너무 간단한 반복문이라면 함수형 인터페이스가 더욱 오래 걸린다. (cpu 사용에 대한 이슈)
Linked List의 경우 일반 for문이 더 오래걸리고,
ArrayList는 거의 비슷하며,
Array (배열)에서는 일반 for문이 더 빨랐다.
※ 쓰니는 간단하게 적었지만 더 자세한 내용이 궁금하다면 함수형 인터페이스와 람다식, Iterator 등을 알아보자!
'코딩 공부(hackerrank)' 카테고리의 다른 글
[Java] List<Object> list = new List<Object>(); 안되는 이유 (0) | 2023.01.10 |
---|---|
[Java] String.format 소수점 표기법 (0) | 2023.01.10 |
[Java] String vs StringBuilder (0) | 2023.01.10 |
[HackerRank] 코딩 시 주의하자! (3월) (0) | 2022.03.22 |