26/06/18 IL (I Learned)

Java의 반복문, 배열, 다차원 배열, 향상된 for문, List, Map, Set 컬렉션 프레임워크

1) while 반복문과 switch 표현식

학습 내용설명
while 반복문조건이 참인 동안 반복 수행
break반복문 즉시 종료
switch 표현식값을 반환할 수 있는 switch 문
Scanner사용자 입력 처리
isBlank()문자열이 비어있는지 확인
import java.util.Scanner;

public class Example01 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("포켓몬을 선택하세요.");
            System.out.println("1. 이상해씨 2. 꼬부기 3. 파이리 4. 피카츄");

            int selectedNumber = scanner.nextInt();

            String pokemonName = switch (selectedNumber) {
                case 1 -> "이상해씨";
                case 2 -> "꼬부기";
                case 3 -> "파이리";
                case 4 -> "피카츄";
                default -> "";
            };

            if (pokemonName.isBlank()) {
                System.out.println("잘못된 입력입니다.");
            } else {
                System.out.println("선택한 포켓몬 : " + pokemonName);
                break;
            }
        }
    }
}
  • 사용자가 올바른 번호를 입력할 때까지 반복
  • switch 표현식으로 포켓몬 이름 반환
  • 빈 문자열 여부를 검사하여 유효성 체크
  • 정상 입력 시 break로 반복 종료

2) for문과 while문

학습 내용설명
for문반복 횟수가 명확할 때 사용
while문조건 기반 반복
증감 연산자++, --
중첩 반복문반복문 안에 반복문
스코프(scope)변수의 사용 가능 범위
public class Example02 {
    public static void main(String[] args) {

        for (int number = 1; number <= 9; number++) {
            System.out.println(number);
        }

        int count = 1;
        while (count <= 9) {
            System.out.println(count++);
        }

        for (int number = 9; number >= 1; number--) {
            System.out.println(number);
        }

        for (int dan = 1; dan <= 9; dan++) {
            for (int multiplier = 1; multiplier <= 9; multiplier++) {
                System.out.println(dan + " * " + multiplier +
                        " = " + dan * multiplier);
            }
        }
    }
}
  • 정방향 반복과 역방향 반복 구현
  • 이중 for문으로 구구단 출력
  • 내부 반복문이 모두 종료된 후 외부 반복문 진행

03. 배열(Array)

학습 내용설명
배열 선언같은 자료형 여러 개 저장
배열 초기화new 자료형[크기]
인덱스0부터 시작
length배열 길이
Arrays.toString()배열 출력
import java.util.Arrays;

public class Example03 {
    public static void main(String[] args) {

        int[] scores = new int[5];

        scores[0] = 100;

        System.out.println(scores[0]);
        System.out.println(scores.length);

        System.out.println(Arrays.toString(scores));

        int[][] matrix = {
                {1,2,3},
                {4,5,6}
        };

        System.out.println(Arrays.deepToString(matrix));
    }
}
  • 배열 생성 후 값 저장
  • 배열 길이 확인
  • 2차원 배열 출력

04. 배열 순회와 2차원 배열

학습 내용설명
배열 순회반복문을 이용한 접근
역순 탐색length 활용
2차원 배열행(row), 열(column) 구조
이중 반복문다차원 배열 탐색
String[] fruits = {"apple", "banana", "cherry"};

for (int index = 0; index < fruits.length; index++) {
    System.out.println(fruits[index]);
}

for (int index = fruits.length - 1; index >= 0; index--) {
    System.out.println(fruits[index]);
}
  • 정방향 탐색
  • 역방향 탐색
  • 2차원 배열은 이중 반복문 사용

05. 향상된 for문 (for-each)

학습 내용설명
향상된 for문배열 요소 순회
반복 변수읽기 전용 개념
다차원 배열 순회중첩 for-each 가능
char[] alphabetArray = {'a','b','c'};

for(char alphabet : alphabetArray){
    System.out.println(alphabet);
}
  • 배열 요소를 직접 순회
  • 인덱스 없이 접근 가능
  • 읽기 전용으로 사용

06. List와 ArrayList

학습 내용설명
ArrayList동적 배열
List 인터페이스리스트의 공통 규격
제네릭자료형 제한
add/get/set/remove주요 메서드
import java.util.ArrayList;
import java.util.List;

public class Example06 {

    public static void main(String[] args) {

        List<Integer> numberList = new ArrayList<>();

        numberList.add(10);
        numberList.add(20);

        System.out.println(numberList.get(0));

        numberList.set(1, 100);

        numberList.remove(0);

        System.out.println(numberList);
    }
}
  • List 타입으로 선언
  • ArrayList 객체 생성
  • 추가, 조회, 수정, 삭제 수행

07. Map과 HashMap

학습 내용설명
MapKey-Value 구조
HashMapMap 구현 클래스
put/get저장 및 조회
getOrDefault기본값 처리
entrySet전체 순회
import java.util.HashMap;
import java.util.Map;

public class Example07 {

    public static void main(String[] args) {

        Map<String, Integer> fruitPriceMap = new HashMap<>();

        fruitPriceMap.put("사과", 1000);
        fruitPriceMap.put("바나나", 2000);

        System.out.println(fruitPriceMap.get("사과"));

        fruitPriceMap.put(
                "체리",
                fruitPriceMap.getOrDefault("체리", 0)
        );

        for(Map.Entry<String, Integer> item
                : fruitPriceMap.entrySet()) {

            System.out.println(item.getKey());
            System.out.println(item.getValue());
        }
    }
}
  • Key-Value 구조 사용
  • getOrDefault로 NullPointerException 예방
  • entrySet으로 전체 순회

08. Set과 HashSet

오늘 배운 내용

학습 내용설명
Set중복 불가
HashSetSet 구현 클래스
contains존재 여부 확인
add/remove추가 및 삭제

실습 코드

import java.util.HashSet;
import java.util.Set;

public class Example08 {

    public static void main(String[] args) {

        Set<String> memberSet = new HashSet<>();

        memberSet.add("철수");
        memberSet.add("철수");
        memberSet.add("영희");

        System.out.println(memberSet);

        System.out.println(memberSet.contains("영희"));

        memberSet.remove("철수");
    }
}
  • 중복 데이터 저장 불가
  • contains로 존재 여부 확인
  • remove로 삭제 가능

직면한 문제와 해결 과정

문제 1. ArrayList 와 List 의 차이

고민한 내용

ArrayList<Integer> scoreList = new ArrayList<>();

List<Integer> scoreList = new ArrayList<>();
구분ArrayList 선언List 선언
타입구현 클래스인터페이스
사용 가능 메서드ArrayList 전용 + List 메서드List가 제공하는 메서드만
유연성낮음높음
실무 사용상대적으로 적음권장

해결하기 위해 시도한 것

시도결과
ArrayList로 선언정상 동작
List로 선언정상 동작
메서드 사용 범위 비교인터페이스 기준으로 제한됨 확인

결론

List<Integer> scoreList = new ArrayList<>();

실무에서는 구현체보다 인터페이스에 의존하는 것이 객체지향 원칙에 더 적합하다.


문제 2. HashMap<String,Integer> 와 Map<String,Integer> 의 차이

고민한 내용

HashMap<String, Integer> productMap = new HashMap<>();

Map<String, Integer> productMap = new HashMap<>();

해결하기 위해 시도한 것

시도결과
HashMap 타입 선언사용 가능
Map 타입 선언사용 가능
구현체 변경 가정Map이 훨씬 유리

차이점 정리

구분HashMapMap
종류구현 클래스인터페이스
역할실제 동작 구현규격 정의
유연성낮음높음
실무 권장

이를 통해 배운 점

객체지향 프로그래밍에서는 구현체(HashMap, ArrayList)가 아니라 인터페이스(Map, List)에 의존하도록 설계하는 것이 유지보수와 확장성 측면에서 유리하다.

Map<String, Integer> itemMap = new HashMap<>();
List<Integer> scoreList = new ArrayList<>();

앞으로 컬렉션을 선언할 때는 특별한 이유가 없다면 인터페이스 타입(List, Map, Set)을 우선 사용하는 습관을 가져야겠다고 느꼈다.

profile
예 마 함 가보입시더

0개의 댓글