Learning Module
Chapter 2: 데이터 묶음의 기초 - 배열과 문자열
Array, String Pool, StringBuilder, Methods
1. 배열 (Array): 서랍장 만들기
IMPORTANT
입문자 필수: 같은 종류의 물건이 여러 개 있을 때 각각 상자를 만들면 너무 힘들겠죠? 배열은 "숫자 상자 10개짜리 서랍장"을 한 번에 만드는 문법입니다.
핵심 메서드와 속성 (What/How/When)
- length (속성)
- What: 배열이 총 몇 칸인지 알려줍니다.
- How:
int size = numbers.length; - When: 반복문(for)을 돌면서 내용을 모두 확인할 때 필수입니다.
- 인덱스 접근 (numbers[i])
- What: 특정 위치의 값을 꺼내거나 넣습니다. (0번부터 시작함에 주의!)
2. 문자열 (String)과 단골 메서드
자바에서 가장 많이 쓰이는 도구는 단연 '글자(String)'입니다. 하지만 많은 분이 유용한 기능을 몰라서 못 쓰시곤 하죠.
꼭 알아야 할 String 메서드 (What/How/When)
- equals(...)
- What: 두 글자가 내용이 같은지 비교합니다. (매우 중요! ==을 쓰면 안 됩니다.)
- When: 로그인 비밀번호가 맞는지, 입력받은 명령어가 "시작"인지 확인할 때 씁니다.
- contains(...)
- What: 특정 글자가 포함되어 있는지 확인합니다.
- When: 검색 기능 구현 시 제목에 '자바'라는 단어가 있는지 찾을 때 씁니다.
- split(...)
- What: 구분자로 문장을 쪼개서 배열로 만듭니다.
- When: "사과,바나나,포도"라는 글자에서 과일 이름만 따로 추출하고 싶을 때 씁니다.
- substring(...)
- What: 글자의 일부분만 떼어냅니다.
- When: 주민번호 앞자리에서 생년월일만 가져오고 싶을 때 씁니다.
3. 효율적인 문자열 합치기: StringBuilder
글자를 계속 더할 때(msg = msg + "!") 자바는 매번 새로운 객체를 만드는 낭비를 합니다. 이때 전용 도구인 StringBuilder를 쓰면 매우 빠릅니다.
핵심 메서드
- append(...): 뒤에 내용을 덧붙입니다.
- toString(): 조립이 끝난 내용을 최종적인 String으로 바꿉니다.
핵심 요약
- 1배열은 0번부터 순서가 시작된다는 점을 꼭 기억하세요.
- 2문자열 '내용'을 비교할 때는 반드시 s1.equals(s2)를 써야 합니다. (==은 주소 비교입니다.)
- 3자주 변하는 긴 문장을 만들 때는 StringBuilder가 성능상 압도적으로 좋습니다.
실전 코드 예제
실전 문자열 요리하기java
| 1 | public class StringChef { |
| 2 | public static void main(String[] args) { |
| 3 | String data = "아이폰,갤럭시,픽셀"; |
| 4 | |
| 5 | // 1. 나누기 (split) |
| 6 | String[] phones = data.split(","); |
| 7 | for (String phone : phones) { |
| 8 | System.out.println("기종: " + phone); |
| 9 | } |
| 10 | |
| 11 | // 2. 포함 여부 (contains) |
| 12 | if (data.contains("갤럭시")) { |
| 13 | System.out.println("삼성 폰이 목록에 있습니다."); |
| 14 | } |
| 15 | |
| 16 | // 3. 효율적 조립 (StringBuilder) |
| 17 | StringBuilder sb = new StringBuilder(); |
| 18 | sb.append("총 기종 수: ").append(phones.length).append("개"); |
| 19 | System.out.println(sb.toString()); |
| 20 | } |
| 21 | } |
Tech Interview Challenge
현업 면접관이 실제로 던지는 질문입니다. 먼저 스스로 답해보세요.
Medium왜 String 비교에 ==을 쓰면 안 되나요?
왜 String 비교에 ==을 쓰면 안 되나요?
A
== 연산자는 메모리 상의 '위치(주소)'가 같은지를 봅니다. 반면 equals() 메서드는 그 안에 담긴 '글자 내용'이 같은지를 봅니다. 자바는 똑같은 글자라도 힙 메모리의 다른 곳에 저장될 수 있으므로, 내용이 같은지 보려면 반드시 equals()를 써야 합니다.
