본문 바로가기
Java

[Java] 기본 문법 정리 - 문자열, 컬렉션(List, Set, Map)

by clolee 2025. 3. 19.

6. 문자열 다루기 (String, StringBuilder)

자바에서 문자열을 다루는 방법은 크게 String(불변 객체)과 StringBuilder(가변 객체) 두 가지.


📍 1) String 클래스 (불변, Immutable)

  • String 객체는 한 번 생성되면 변경 불가능(Immutable)
  • 문자열을 다룰 때 새로운 객체를 계속 생성하므로 성능이 중요할 때는 StringBuilder 사용 추천
  • 문자열 비교 시 == 대신 equals() 메서드 사용!

1. 문자열 선언과 초기화

String str1 = "Hello"; // 리터럴 방식
String str2 = new String("Hello"); // 객체 생성 방식

📌 리터럴 방식은 메모리 효율적 (같은 문자열은 재사용)


2. 문자열 연결 (+, concat())

String s1 = "Hello";
String s2 = "World";
String result = s1 + " " + s2;  // "Hello World"
String result2 = s1.concat(" ").concat(s2);  // "Hello World"

3. 문자열 길이 (length())

String text = "Java Programming";
System.out.println(text.length()); // 16

4. 문자 추출 (charAt(index))

String word = "Java";
System.out.println(word.charAt(0)); // 'J'

5. 부분 문자열 추출 (substring(start, end))

String sentence = "Hello, World!";
System.out.println(sentence.substring(7, 12)); // "World"

6. 특정 문자/문자열 포함 여부 (contains())

String message = "Welcome to Java";
System.out.println(message.contains("Java")); // true

7. 특정 문자/문자열 위치 찾기 (indexOf(), lastIndexOf())

String sentence = "Programming in Java";
System.out.println(sentence.indexOf("Java")); // 16
System.out.println(sentence.lastIndexOf("a")); // 19

8. 문자열 대소문자 변환 (toUpperCase(), toLowerCase())

String text = "Hello";
System.out.println(text.toUpperCase()); // "HELLO"
System.out.println(text.toLowerCase()); // "hello"

9. 문자열 치환 (replace(), replaceAll())

String text = "Java is fun";
System.out.println(text.replace("Java", "Python")); // "Python is fun"

10. 문자열 공백 제거 (trim())

String text = "   Hello World   ";
System.out.println(text.trim()); // "Hello World"

11. 문자열 분할 (split())

String data = "apple,banana,grape";
String[] fruits = data.split(",");

for (String fruit : fruits) {
    System.out.println(fruit);
}

📌 실행 결과:

apple  
banana  
grape  

📍 2) StringBuilder 클래스 (가변, Mutable)

  • StringBuilder는 문자열을 변경할 수 있는 객체 (성능이 더 좋음)
  • + 연산보다 StringBuilder를 쓰면 문자열 연산 속도가 훨씬 빠름
  • 멀티스레드 환경에서는 StringBuffer 사용

1. StringBuilder 선언과 초기화

StringBuilder sb = new StringBuilder("Hello");

2. 문자열 추가 (append())

sb.append(" World");
System.out.println(sb); // "Hello World"

3. 문자열 삽입 (insert(index, text))

sb.insert(5, ",");
System.out.println(sb); // "Hello, World"

4. 문자열 삭제 (delete(start, end))

sb.delete(5, 6);
System.out.println(sb); // "Hello World"

5. 문자열 변경 (replace(start, end, text))

sb.replace(6, 11, "Java");
System.out.println(sb); // "Hello Java"

6. 문자열 뒤집기 (reverse())

sb.reverse();
System.out.println(sb); // "avaJ olleH"

String vs StringBuilder 비교

기능 String  StringBuilder
변경 가능 여부 ❌ 불가능 (Immutable) ✅ 가능 (Mutable)
속도 느림 (새 객체 생성) 빠름 (원본 수정)
사용 예 문자열 조작이 적을 때 문자열을 자주 변경할 때

7. 컬렉션 프레임워크 (List, Set, Map)

자바의 컬렉션(Collection) 프레임워크는 여러 데이터를 효율적으로 다루기 위한 자료구조.


📍 1) List (순서 O, 중복 O)

  • 대표적으로 ArrayList, LinkedList가 있음
  • ArrayList는 배열 기반 (탐색이 빠름)
  • LinkedList는 연결 리스트 기반 (삽입/삭제가 빠름)

ArrayList 사용 예

import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();

        list.add(10); // 추가
        list.add(20);
        list.add(30);

        list.remove(1); // 인덱스 1 삭제 (20 제거)

        System.out.println("리스트 크기: " + list.size()); // 2

        for (int num : list) {
            System.out.println(num);
        }
    }
}

📍 2) Set (순서 X, 중복 X)

  • 중복 데이터를 허용하지 않는 자료구조
  • 대표적으로 HashSet과 TreeSet이 있음

HashSet 사용 예

import java.util.HashSet;

public class SetExample {
    public static void main(String[] args) {
        HashSet<Integer> set = new HashSet<>();

        set.add(10);
        set.add(20);
        set.add(10); // 중복 값은 추가되지 않음

        System.out.println(set); // [10, 20]
    }
}

📍 3) Map (키-값 저장, 순서 X, 중복 키 X)

  • 대표적으로 HashMap, TreeMap이 있음
  • HashMap은 키 순서가 없음, TreeMap은 키 기준 정렬됨

HashMap 사용 예

import java.util.HashMap;

public class MapExample {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();

        map.put("apple", 3);
        map.put("banana", 2);
        map.put("cherry", 5);

        System.out.println(map.get("banana")); // 2

        map.remove("apple"); // "apple" 키 삭제
        System.out.println(map);
    }
}

 

댓글