Do it! 알고리즘 입문: 자바 편 (16)[책리뷰 & Book review]
본문 바로가기

컴퓨터공부/책리뷰 & book review

Do it! 알고리즘 입문: 자바 편 (16)[책리뷰 & Book review]

by Life & study 2024. 2. 1.
반응형

 

 

 

 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을 사용하면 좋습니다.

 

 

 

 

 

반응형

댓글