2025-08-28 System클래스, 컬렉션 프레임워크

Ckd gus·2026년 2월 2일

System 클래스 · Wrapper 클래스 · 컬렉션 프레임워크 정리

오늘은 System 클래스, Wrapper 클래스, 그리고 컬렉션 프레임워크(List / Set / Map) 를 중심으로 실습 위주 학습을 진행했다.
개념 자체는 많았지만, 직접 코드를 작성해보면서 흐름을 이해할 수 있었다.


System 클래스

System 클래스는 자바 프로그램의 핵심 유틸리티 클래스로, 다음과 같은 기능들을 제공한다.

  • 표준 입출력 스트림
  • 시간 측정
  • 시스템 프로퍼티 / 환경 변수
  • 가비지 컬렉션 제안
  • 프로그램 종료
  • 배열 복사

표준 입출력

public class SystemIOExample {
    public static void main(String[] args) {
        // 표준 출력
        System.out.println("일반 메시지");
        System.err.println("에러 메시지");

        // 표준 입력
        Scanner scanner = new Scanner(System.in);
        System.out.print("이름을 입력하세요: ");
        String name = scanner.nextLine();
        System.out.println("안녕하세요, " + name + "님!");
        scanner.close();
    }
}

시간 측정 및 시스템 정보

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

        long startTime = System.currentTimeMillis();

        for(int i = 0; i < 1_000_000; i++) {
            Math.sqrt(i);
        }

        long endTime = System.currentTimeMillis();
        System.out.println("실행 시간: " + (endTime - startTime) + "ms");

        // 시스템 프로퍼티
        System.out.println("Java 버전: " + System.getProperty("java.version"));
        System.out.println("OS: " + System.getProperty("os.name"));

        // 배열 복사
        int[] src = {1,2,3,4,5};
        int[] dest = new int[5];
        System.arraycopy(src, 0, dest, 0, src.length);

        // GC 제안
        System.gc();

        // 프로그램 종료
        // System.exit(0);
    }
}

Wrapper 클래스

Wrapper 클래스는 기본 타입을 객체로 다루기 위해 사용하는 클래스이다.

  • 박싱(Boxing): 기본형 → 객체
  • 언박싱(Unboxing): 객체 → 기본형
public class WrapperExample {
    public static void main(String[] args) {

        Integer i = 10;   // 자동 박싱
        int value = i;    // 자동 언박싱

        int parsed = Integer.parseInt("123");
        String str = Integer.toString(456);

        System.out.println("int 최대값: " + Integer.MAX_VALUE);
        System.out.println("int 최소값: " + Integer.MIN_VALUE);
    }
}

컬렉션 프레임워크(Collection Framework)

컬렉션 프레임워크는 데이터를 효율적으로 저장·검색·조작하기 위한 표준 구조이다.

장점

  • 효율적인 데이터 관리
  • 성능 최적화
  • 재사용성 및 유지보수 용이
  • 타입 안정성(제네릭)


List (ArrayList)

  • 순서 O
  • 중복 O
  • 인덱스 접근 가능
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Spring");
list.add("Backend");

System.out.println(list.size());

for (String s : list) {
    System.out.println(s);
}
  • add(), get(), set(), remove() 자주 사용
  • 내부적으로 동적 배열 사용

Iterator

Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
    System.out.println(iter.next());
}
  • foreach는 내부적으로 Iterator를 사용
  • 요즘은 foreach 사용이 일반적

Set (HashSet)

  • 순서 X
  • 중복 X
  • 빠른 검색
Set<String> fruits = new HashSet<>();
fruits.add("사과");
fruits.add("사과");
fruits.add("바나나");

System.out.println(fruits);

⚠️ 객체를 Set에 넣을 경우
toString()equals()를 반드시 오버라이딩해야 정상 동작한다.


Map (HashMap)

  • key : value 구조
  • key는 중복 불가
  • 빠른 검색
Map<String, String> phoneBook = new HashMap<>();
phoneBook.put("Hong", "010-1111-2222");
phoneBook.put("Kim", "010-3333-4444");
phoneBook.put("Hong", "010-9999-8888"); // 덮어쓰기

System.out.println(phoneBook.get("Hong"));

Map 순회 방법

for (String key : phoneBook.keySet()) {
    System.out.println(key + " : " + phoneBook.get(key));
}

for (Map.Entry<String, String> entry : phoneBook.entrySet()) {
    System.out.println(entry.getKey() + " :: " + entry.getValue());
}

느낀 점

오늘은 실습 위주 수업이라 부담이 덜했고,
여러 API를 직접 사용해보면서 이해가 훨씬 잘 됐다.

내일부터는 작은 프로젝트를 진행할 예정인데
CLI 기반 도서 관리 시스템을 만들 것 같다.

객체를 어떻게 추상화할지 팀원들과 이야기하면서
어느 정도 뼈대는 잡힌 상태라,
내일 구현해보는 게 기대되기도 하고 조금 걱정되기도 한다.

내일은 작성한 코드를 정리해서 설명해보는 시간을 가져야겠다.

profile
백엔드 공부중입니다.

0개의 댓글