java.lang 핵심: String, StringBuilder, Wrapper
가장 많이 쓰는 클래스일수록 내부를 정확히 알아야 한다. 이 레슨을 끝내면 String이 왜 불변인지,
==와equals가 언제 다른 결과를 내는지, 루프 안 문자열 연결이 왜 느린지,Integer비교가 왜 127까지만 되는지를 설명하고 올바르게 코딩할 수 있다.
1. 왜 배우는가
java.lang 패키지는 import 없이 자동으로 사용할 수 있는 유일한 패키지다. String, Integer, Math, System, Object가 여기 있다. 너무 당연하게 쓰다 보니 내부를 모르고 지나가는데, 실무 버그와 성능 문제의 상당수가 여기서 나온다.
대표적인 사례 세 가지. (1) if (status == "ACTIVE")가 어떤 환경에서는 동작하고 어떤 환경에서는 동작하지 않는다 — String Pool과 ==의 관계를 모르기 때문이다. (2) 로그 파일 10만 줄을 +로 이어 붙였더니 몇 분이 걸린다 — String 불변성과 StringBuilder의 차이를 모르기 때문이다.
(3) Integer a = 128, b = 128; a == b가 false다 — Integer 캐시를 모르기 때문이다. 이 셋은 면접 단골 질문이기도 하지만, 그보다 실제로 운영 장애를 낸 사례들이다.
이 레슨은 "외워야 할 API 목록"이 아니라 "왜 그렇게 동작하는가"에 집중한다. 원리를 알면 API는 문서를 보면 되고, 함정은 미리 피할 수 있다.