공공부하자개발 · 영어 학습 노트
자바
중급객체지향과 코어 라이브러리0/9 완료
  • 01상속, 다형성, 오버라이딩
  • 02추상 클래스 vs 인터페이스
  • 03예외 처리
  • 04java.lang 심화
  • 05컬렉션 프레임워크 딥다이브
  • 06메서드 활용 패턴 (중급)
  • 07Object 메서드와 비교
  • 08java.time 실무 날짜 계산
  • 09HTTP 와 JSON 기초
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 중급 › 04 / 9

java.lang 심화

String, StringBuilder, Wrapper
섹션 7진행 0 / 9
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

6. 연습 문제

문제 1: 참조 동일성 예측

다음 각 비교의 결과(true/false)를 예측하라.

java
String s1 = "java";
String s2 = "ja" + "va";
String s3 = new String("java");
String half = "ja";
String s4 = half + "va";
Integer i1 = 100, i2 = 100, i3 = 1000, i4 = 1000;

s1 == s2, s1 == s3, s1 == s4, s1 == s4.intern(), i1 == i2, i3 == i4
정답 보기
java
// s1 == s2          → true   (컴파일 타임 상수 접기 → 풀의 같은 객체)
// s1 == s3          → false  (new는 힙에 별도 객체)
// s1 == s4          → false  (런타임 연결 → 새 객체)
// s1 == s4.intern() → true   (intern이 풀의 "java" 반환)
// i1 == i2          → true   (100은 -128~127 캐시 범위)
// i3 == i4          → false  (1000은 캐시 밖 → 서로 다른 객체)

문제 2: CSV 한 줄 만들기

List<String> names = List.of(" kim ", "LEE", " park")를 받아 각 이름을 strip + 소문자로 정규화한 뒤 ,로 이어 "kim,lee,park"를 만드는 메서드를 두 가지 방식(StringBuilder, String.join 또는 스트림)으로 작성하라.

정답 보기
java
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    static String withBuilder(List<String> names) {
        StringBuilder sb = new StringBuilder();
        for (String n : names) {
            if (sb.length() > 0) sb.append(',');
            sb.append(n.strip().toLowerCase());
        }
        return sb.toString();
    }

    static String withStream(List<String> names) {
        return names.stream()
                .map(n -> n.strip().toLowerCase())
                .collect(Collectors.joining(","));
    }

    public static void main(String[] args) {
        List<String> names = List.of(" kim ", "LEE", " park");
        System.out.println(withBuilder(names));   // 출력: kim,lee,park
        System.out.println(withStream(names));    // 출력: kim,lee,park
    }
}

문제 3: 안전한 숫자 파싱 유틸

Map<String, String> params에서 키를 찾아 int로 변환하되, 키가 없거나 숫자가 아니면 기본값을 반환하는 getInt(Map<String,String> params, String key, int defaultValue)를 작성하라. NPE와 NumberFormatException이 모두 나지 않아야 한다.

정답 보기
java
import java.util.Map;

public class Main {
    static int getInt(Map<String, String> params, String key, int defaultValue) {
        String raw = params.get(key);
        if (raw == null || raw.isBlank()) return defaultValue;
        try {
            return Integer.parseInt(raw.strip());
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }

    public static void main(String[] args) {
        Map<String, String> params = Map.of("page", " 3 ", "size", "abc");
        System.out.println(getInt(params, "page", 1));    // 출력: 3
        System.out.println(getInt(params, "size", 20));   // 출력: 20
        System.out.println(getInt(params, "sort", 0));    // 출력: 0
    }
}
연습 문제
  • 문제 1: 참조 동일성 예측
  • 문제 2: CSV 한 줄 만들기
  • 문제 3: 안전한 숫자 파싱 유틸
이전 섹션5 자주 하는 실수 (Tip)6 / 7다음 섹션7 정리