[멋사 클라우드 5기] Day 5 - Java 기본 라이브러리 & 컬렉션 정리

2026. 1. 28. 01:18·Learning Log

5일차에는 Java에서 가장 기본이 되는 java.lang 패키지와

문자열, Wrapper 클래스, 제네릭, 컬렉션 프레임워크를 함께 정리했다.

“언제, 왜 쓰는지” 중심으로 정리해봤다.


1. java.lang 패키지

java.lang은 자바 프로그램의 기본 클래스 묶음이다.

이 패키지에 속한 클래스들은 import 없이 바로 사용 가능하다.

주요 클래스

  • Object
    모든 클래스의 최상위 부모
  • System
    표준 입출력, 시간 측정, JVM 종료 등
  • Class
    클래스 메타데이터를 표현
  • String
    문자열 처리
  • Wrapper 클래스
    기본 타입을 객체로 감싼 클래스
  • Math
    수학 관련 정적 메서드 제공

2. Object 클래스 핵심 메서드

모든 클래스는 암시적으로 Object를 상속한다.

equals()

  • 기본 구현은 ==과 동일 (주소 비교)
  • String, Wrapper 등은 값 비교로 오버라이딩됨
String a = new String("hi");
String b = new String("hi");

a.equals(b); // true
a == b;      // false

hashCode()

  • 객체를 식별하는 정수 값
  • equals()를 오버라이딩하면 hashCode()도 반드시 함께 오버라이딩해야 한다
  • HashMap, HashSet의 동작 기준

toString()

  • 객체를 문자열로 표현
  • 기본 구현: 클래스명@해시코드
Object obj = new Object();
System.out.println(obj); // java.lang.Object@6d06d69c

3. System 클래스

System은 JVM을 통해 운영체제의 일부 기능을 사용하게 해준다.

모든 필드와 메서드는 static이다.

System.out.println("출력");
long start = System.currentTimeMillis();
System.exit(0);

4. Class 클래스

클래스 자체의 정보를 다루는 메타 객체다.

Class 객체 얻는 방법

Class c1 = String.class;
Class c2 = Class.forName("java.lang.String");
Class c3 = "abc".getClass();

5. String과 문자열 처리

String의 특징

  • immutable(불변) 객체
  • 문자열을 수정하면 새 객체 생성
String s = "a";
s = s + "b"; // 새로운 String 객체

String.valueOf()

toString()보다 안전한 문자열 변환 방법이다.

Object obj = null;
String s = String.valueOf(obj); // "null"

6. StringBuilder vs StringBuffer

문자열을 수정하면서 사용할 때 쓰는 클래스다.

StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append(" world");

String result = sb.toString();

차이점

구분 StringBuilder StringBuffer

스레드 안전 ❌ ✅
성능 빠름 느림
사용 권장 ✅ 거의 없음

👉 대부분 StringBuilder 사용


7. Wrapper 클래스

기본 타입을 객체로 감싼 클래스다.

  • int → Integer
  • double → Double

언제 필요한가?

  1. 컬렉션 사용 (List<Integer>)
  2. null 표현 필요할 때
  3. 객체 메서드 사용 시
Integer n = 10; // 오토 박싱
int x = n;      // 오토 언박싱

⚠️ null 언박싱 시 NullPointerException 주의


8. 제네릭(Generic)

제네릭 한 줄 정의

타입을 사용 시점에 결정하도록 미루는 문법

제네릭이 없을 때 문제

Object value = box.get();
String s = (String) value; // 위험

제네릭 사용

class Box<T> {
    private T value;
}
Box<String> box = new Box<>();
String s = box.get();
  • 컴파일 타임 타입 체크
  • 캐스팅 제거
  • 코드 의도 명확

제네릭 클래스 vs 메서드

class Box<T> { }        // 클래스 단위
static <T> T echo(T v) // 메서드 단위

9. 컬렉션 프레임워크 개요

구조

  • List: 순서 O, 중복 O
  • Set: 순서 X, 중복 X
  • Queue: FIFO
  • Map: Key-Value (Key 중복 X)

List

  • ArrayList: 조회 빠름
  • LinkedList: 삽입/삭제 빠름

Set

  • HashSet: 가장 빠름
  • LinkedHashSet: 입력 순서 유지
  • TreeSet: 자동 정렬

Map

Map<String, Integer> map = new HashMap<>();
map.put("Kim", 25);
map.get("Kim");

10. Stack / Queue / Deque

Stack (LIFO)

  • Stack 클래스는 비권장
  • Deque 사용 권장
Deque<String> stack = new ArrayDeque<>();
stack.push("A");
stack.pop();

 

Queue (FIFO)

  • Queue 인터페이스의 구현체로 LinkedList를 사용할 수 있다
  • 하지만 일반적인 큐 구현에서는 ArrayDeque가 더 권장된다
// 가능하지만 최선은 아님
Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.poll();

// 권장
Queue<String> queue = new ArrayDeque<>();
queue.offer("A");
queue.poll();

Deque (양방향 큐)

  • Stack, Queue 모두 구현 가능
  • 실무에서 가장 많이 쓰임
Deque<String> dq = new ArrayDeque<>();
dq.addFirst("A");
dq.addLast("B");

📚 Reference

  • 『혼자 공부하는 자바』, 신용권 저

'Learning Log' 카테고리의 다른 글

[멋사 클라우드 5기] Day 7 - Lambda · Stream 심화 + Optional  (0) 2026.01.30
[멋사 클라우드 5기] Day 6 - 자료구조, Lambda, Stream  (0) 2026.01.29
equals가 있는데 hashCode는 왜 필요할까?  (0) 2026.01.27
abstract vs interface: 비슷한데 왜 굳이 둘 다 있을까?  (0) 2026.01.27
[멋사 클라우드 5기] Day 4 - 상속, 다형성, 그리고 abstract vs interface  (0) 2026.01.27
'Learning Log' 카테고리의 다른 글
  • [멋사 클라우드 5기] Day 7 - Lambda · Stream 심화 + Optional
  • [멋사 클라우드 5기] Day 6 - 자료구조, Lambda, Stream
  • equals가 있는데 hashCode는 왜 필요할까?
  • abstract vs interface: 비슷한데 왜 굳이 둘 다 있을까?
allluck777
allluck777
allluck777
    • 분류 전체보기 (44) N
      • AWS (0)
      • Network (0)
      • Linux (0)
      • Docker (0)
      • Project (4)
        • CloudNote (4)
      • Learning Log (36) N
      • Lecture (3)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (3)
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.6
allluck777
[멋사 클라우드 5기] Day 5 - Java 기본 라이브러리 & 컬렉션 정리
상단으로

티스토리툴바