

Do it! 알고리즘 입문: 자바 편 (16)[책리뷰 & Book review]
향상된 for문(Enhanced for loop)은 배열이나 컬렉션의 모든 요소를 순회하는 데 사용되는 구문입니다.
이 구문의 문법적 개념은 다음과 같습니다:
java
for (타입 변수명 : 배열 또는 컬렉션) {
// 반복해서 실행할 코드
}
"타입 변수명": 순회하려는 배열이나 컬렉션의 요소 타입과 일치해야 합니다.
이 변수는 반복문 내에서 각 요소를 참조하는 데 사용됩니다.
":" 기호: "in"을 의미하며, "변수명 in 배열 또는 컬렉션"으로 이해할 수 있습니다.
"배열 또는 컬렉션": 순회하려는 대상입니다. 이는 배열이거나 Iterable 인터페이스를 구현하는 컬렉션이어야 합니다.
반복문 내부의 코드: 배열이나 컬렉션의 각 요소에 대해 실행됩니다.
예제 코드와 함께 이해해 봅시다:
java
List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry", "Date", "Elderberry");
for (String fruit : fruits) {
System.out.println(fruit);
}
위 코드의 흐름을 다음과 같이 그림으로 나타낼 수 있습니다:
fruits 리스트: ["Apple", "Banana", "Cherry", "Date", "Elderberry"]
for문 시작
|
v
"Apple" -> "Banana" -> "Cherry" -> "Date" -> "Elderberry"
^ ^
| |
fruit 변수가 참조하는 위치 향상된 for문이 순회하는 방향
이처럼 향상된 for문은 순차적으로 컬렉션의 각 요소를 순회하며,
각 요소를 참조하는 변수를 통해 반복문 내에서 사용할 수 있습니다.
이를 통해 코드를 간결하게 만들어주며, Iterator를 직접 사용하는 것보다 버그 발생 가능성을 줄여줍니다. 하지만, 인덱스를 통한 접근이 필요하거나, 순회 방향을 변경해야 하는 경우에는 기본 for문을 사용해야 합니다.
for문 공부법
향상된 for문을 사용할 때 공부해야 할 주요 범위와 종류는 다음과 같습니다:
기본적인 사용법: 향상된 for문의 기본적인 사용법을 이해하고, 어떻게 배열이나 컬렉션을 순회하는지 알아봅니다.
이는 for (Type variable : collection) 형태로, Type은 순회할 배열이나 컬렉션의 요소의 타입, variable은 각 요소를 임시로 저장하는 변수의 이름, collection은 순회할 배열이나 컬렉션의 이름을 나타냅니다.
다양한 데이터 타입과 함께 사용: 향상된 for문은 모든 데이터 타입의 배열이나 컬렉션과 함께 사용될 수 있습니다.
정수, 실수, 문자열, 사용자 정의 객체 등 다양한 데이터 타입에 대한 순회 방법을 알아봅니다.
다양한 컬렉션과 함께 사용: ArrayList, LinkedList, HashSet, TreeSet, HashMap 등의 다양한 자바 컬렉션과 함께 향상된 for문을 사용하는 방법을 알아봅니다.
다차원 배열과 함께 사용: 2차원 이상의 다차원 배열을 순회하는 방법을 알아봅니다.
조건문과 함께 사용: if문 등의 조건문과 함께 향상된 for문을 사용하여, 특정 조건을 만족하는 요소에 대해서만 작업을 수행하는 방법을 알아봅니다.
메서드와 함께 사용: 향상된 for문 내부에서 메서드를 호출하거나, 향상된 for문 자체를 메서드의 매개변수로 전달하는 등의 방법을 알아봅니다.
예외 처리: 향상된 for문 사용 중 발생 가능한 예외 상황과 이를 어떻게 처리할지에 대해 알아봅니다.
성능 이슈: 향상된 for문이 일반 for문에 비해 어떤 성능적인 차이를 가지는지, 언제 사용하는 것이 더 효율적인지에 대해 알아봅니다.
컬렉션에 대해
향상된 for문을 사용하여 다양한 자바 컬렉션을 순회하는 방법을 설명하겠습니다.
ArrayList와 함께 사용:
java
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add("Cherry");
for (String fruit : arrayList) {
System.out.println(fruit);
}
위 코드는 ArrayList의 각 요소를 순회하며 출력합니다.
LinkedList와 함께 사용:
java
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Apple");
linkedList.add("Banana");
linkedList.add("Cherry");
for (String fruit : linkedList) {
System.out.println(fruit);
}
위 코드는 LinkedList의 각 요소를 순회하며 출력합니다.
HashSet과 함께 사용:
java
HashSet<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Cherry");
for (String fruit : hashSet) {
System.out.println(fruit);
}
위 코드는 HashSet의 각 요소를 순회하며 출력합니다.
TreeSet과 함께 사용:
java
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Cherry");
for (String fruit : treeSet) {
System.out.println(fruit);
}
위 코드는 TreeSet의 각 요소를 순회하며 출력합니다. TreeSet은 자동으로 정렬된 순서로 요소를 저장합니다.
HashMap과 함께 사용:
java
HashMap<Integer, String> hashMap = new HashMap<>();
hashMap.put(1, "Apple");
hashMap.put(2, "Banana");
hashMap.put(3, "Cherry");
for (Map.Entry<Integer, String> entry : hashMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
위 코드는 HashMap의 각 키-값 쌍을 순회하며 출력합니다.
이처럼 향상된 for문은 다양한 자바 컬렉션과 함께 사용할 수 있습니다. 이를 통해 우리는 컬렉션의 모든 요소에 쉽게 접근하고, 원하는 작업을 수행할 수 있습니다.
HashMap과 같은 키-값 쌍을 저장하는 데이터 구조에서 향상된 for문
HashMap과 같은 키-값 쌍을 저장하는 데이터 구조에서 향상된 for문을
사용하면, 각 키-값 쌍을 쉽게 순회하고 처리할 수 있습니다.
예를 들어, 다음과 같은 HashMap이 있다고 가정해 봅시다:
Java
HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put("One", 1);
hashMap.put("Two", 2);
hashMap.put("Three", 3);
이 경우, 향상된 for문을 사용하여 각 키-값 쌍을 출력할 수 있습니다:
Java
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
위의 코드에서 entry는 HashMap의 각 키-값 쌍을 나타내는 Map.Entry 객체입니다.
entry.getKey()와 entry.getValue() 메소드를 사용하여 각 키와 값을 가져올 수 있습니다.
이렇게 하면, HashMap의 모든 키-값 쌍을 쉽게 순회하고 처리할 수 있습니다. 이는 데이터를 구조화하고 접근하는 데 매우 유용합니다. 예를 들어, 단어와 그 빈도수를 매핑하는 데 HashMap을 사용할 수 있으며, 향상된 for문을 사용하여 각 단어와 그 빈도수를 출력할 수 있습니다.
HashMap과 treeMap의 차이점은 무엇인가?
HashMap과 TreeMap은 모두 Java의 Map 인터페이스를 구현한 클래스입니다. 두 클래스의 주요 차이점은 키의 정렬과 성능에 있습니다.
HashMap:
키(key)의 순서를 보장하지 않습니다.
데이터의 추가, 제거, 조회 시 일관된 시간 복잡도를 가지는 O(1)을 제공합니다.
TreeMap:
키(key)는 정렬된 순서대로 유지됩니다. (기본적으로 오름차순)
데이터의 추가, 제거, 조회 시 로그 시간 복잡도인 O(log n)을 가집니다.
아래는 HashMap과 TreeMap의 사용 예제입니다:
HashMap:
java
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Apple", 1);
hashMap.put("Banana", 2);
hashMap.put("Cherry", 3);
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
TreeMap:
java
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Apple", 1);
treeMap.put("Banana", 2);
treeMap.put("Cherry", 3);
for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
HashMap의 경우, 키의 순서는 임의적이며, TreeMap의 경우, 키는 알파벳 순서(오름차순)로 정렬됩니다.
두 Map 모두 키와 값을 저장하고 검색하는 데 사용되지만, 키의 정렬이 중요한 경우나 키를 기준으로 데이터를 정렬해야 하는 경우에는 TreeMap을, 순서가 중요하지 않고 성능이 중요한 경우에는 HashMap을 사용하면 좋습니다.

'컴퓨터공부 > 책리뷰 & book review' 카테고리의 다른 글
Do it! 알고리즘 입문: 자바 편 (18)[책리뷰 & Book review] (0) | 2024.02.02 |
---|---|
Do it! 알고리즘 입문: 자바 편 (17)[책리뷰 & Book review] (0) | 2024.02.02 |
Do it! 알고리즘 입문: 자바 편 (15)[책리뷰 & Book review] (0) | 2024.02.01 |
Do it! 알고리즘 입문: 자바 편 (14)[책리뷰 & Book review] (0) | 2024.02.01 |
댓글