본문 바로가기
Language/Java

[JAVA] 문자열 파싱의 정석 : substring()과 split() 완벽 활용 가이드

by Papa Martino V 2026. 1. 19.
728x90

substring()과 split()
substring()과 split()

 

자바 프로그래밍에서 문자열(String)을 다루는 능력은 개발자의 숙련도를 가늠하는 척도 중 하나입니다. 특히 데이터를 원하는 형태로 가공하는 '파싱(Parsing)' 작업에서 가장 빈번하게 사용되는 무기가 바로 substring()split()입니다. 단순히 기능을 아는 것을 넘어, 성능 최적화와 예외 상황까지 고려한 전문적인 활용법을 정리해 드립니다.


1. 정교한 절삭 도구, substring()

substring() 메서드는 문자열의 특정 범위를 인덱스 기준으로 잘라낼 때 사용합니다. 마치 날카로운 메스로 원하는 부분만 도려내는 것과 같습니다.

사용법 및 주의사항

  • substring(int beginIndex): 시작 지점부터 끝까지 문자열을 반환합니다.
  • substring(int beginIndex, int endIndex): 시작 인덱스부터 마지막 인덱스 직전(endIndex - 1)까지를 반환합니다. 이 '미만'의 개념을 정확히 이해해야 인덱스 오류(IndexOutOfBoundsException)를 방지할 수 있습니다.
  • 성능 팁: 자바 7 이후 버전부터는 substring 호출 시 새로운 문자열 객체를 생성하여 기존 문자열의 참조를 유지하지 않으므로, 메모리 누수 걱정 없이 안심하고 사용할 수 있습니다.

2. 강력한 분해 도구, split()

split()은 구분자(Delimiter)를 기준으로 문자열을 조각내어 배열(Array)로 반환합니다. 정규 표현식을 지원하기 때문에 매우 강력한 파싱이 가능합니다.

정규 표현식의 마법

  • 기본 분리: split(",")와 같이 단순 문자로 분리할 수 있습니다.
  • 다중 구분자: split(",|:|;")를 사용하면 콤마, 콜론, 세미콜론 중 어느 것이라도 구분자로 인식하여 분리합니다.
  • 빈 문자열 처리: split(String regex, int limit)에서 limit 값을 음수로 주면 마지막 부분의 빈 문자열까지 모두 포함하여 배열을 만듭니다.

3. substring() vs split() 전격 비교

두 메서드는 용도가 뚜렷하게 나뉩니다. 상황에 맞는 적절한 선택이 코드의 품질을 결정합니다.

비교 항목 substring() split()
작동 원리 인덱스 범위를 지정하여 추출 특정 패턴(구분자)을 기준으로 분할
반환 타입 String (단일 객체) String[] (배열 객체)
성능 매우 빠름 (O(1)에 가깝게 동작) 상대적으로 느림 (정규식 해석 및 배열 생성 비용)
주요 용도 정해진 위치의 데이터 추출 (예: 날짜, ID) 가변적인 개수의 데이터 분리 (예: CSV 데이터)
특이 사항 범위 초과 시 예외 발생 주의 특수문자(., |, * 등) 사용 시 이스케이프 필요

4. 실무형 활용 시나리오

시나리오 A: 고정 길이 데이터 (substring 활용)

전화번호 "01012345678"에서 가운데 번호를 추출할 때는 인덱스가 명확하므로 phone.substring(3, 7)을 사용하는 것이 연산 효율 면에서 가장 좋습니다.

시나리오 B: 가변 구분자 데이터 (split 활용)

사용자가 입력한 태그 목록 "Java,Spring,Database"를 각각의 키워드로 분리해야 한다면 tags.split(",")를 사용하여 한 번에 배열로 관리하는 것이 생산성 측면에서 유리합니다.


5. 결론: 효율적인 코딩을 위한 조언

단순히 결과가 같다고 해서 아무 메서드나 사용하는 것은 지양해야 합니다. 위치가 고정되어 있다면 substring()을, 패턴이나 구분자가 중요하다면 split()을 사용하세요. 특히 대량의 데이터를 처리하는 루프 내에서는 split()의 정규식 컴파일 비용이 성능 저하를 일으킬 수 있으므로 주의가 필요합니다.


6. 출처 및 참고 문헌

  • Oracle Java SE 17 Documentation: java.lang.String.substring()
  • Oracle Java SE 17 Documentation: java.lang.String.split()
  • Core Java Volume I--Fundamentals (Cay S. Horstmann)
728x90