Apache Commons Lang 에 대해… (그냥 필수 lib)
프로젝트 의존성 설정 깨져서 이리저리 건들면서
일단 문제 해결은 했는데
의존성 설정에는 없는 commons lang 라이브러리가, 빌드 시에는 떡 하니 나타납니다.
다른 라이브러리가 얘를 쓰는 거겠지요.
뭐하는 놈인가 찾아보다가
열심히 자괴감을 느끼는 중입니다. 내가 뭐하러 시간을 날렸을까. 얘 쓰면 됐던 것을. 심지어 다른얘 때문에 얘도 의존성에 같이 들어가 있었는데.
이게 있었으면 Util성 클래스들 상당수가 필요없어진다는 걸 느끼게 되었죠.
이거, 개발자들이 필요성을 느낄 만한 Util성 static 메소드들로 가득가득 차있는 녀석입니다.
일단 공홈
https://commons.apache.org/proper/commons-lang/
라이센스는 당연히 아파치 2.0
The standard Java libraries fail to provide enough methods for manipulation of its core classes. Apache Commons Lang provides these extra methods.
Apache Commons Lang provides a host of helper utilities for the java.lang API, notably String manipulation methods, basic numerical methods, object reflection, concurrency, creation and serialization and System properties. Additionally it contains basic enhancements to java.util.Date and a series of utilities dedicated to help with building methods, such as hashCode, toString and equals.
Note that Commons Lang 3.0 (and subsequent versions) use a different package (org.apache.commons.lang3) than the previous versions (org.apache.commons.lang), allowing Commons Lang 3 to be used at the same time as Commons Lang 2.
기존 자바 라이브러리들은 충분한 메소드를 제공하는데 실패했다. 아파치 Commons Lang 은 이러한 추가 메소드들을 제공한다.
java.lang API 를 활용하는 데 도움을 주는 헬퍼 유틸리티들을 제공한다.
(참고로 java.lang API 에는 String, Integer, Double, System 등 핵심 클래스들이 무진장 많이 존재합니다.)
Commons Lang 3.0 과 2.0 은 아예 다른 패키지명을 쓰기 때문에, 둘을 혼용해 쓰는 것이 가능하다.
(이러한 배려 때문에 여러 다른 라이브러리들이 얘를 기반으로 개발되더라도 문제가 없는 것이죠.)
현재 출시되는 3.X 버전대은 자바8 이상이 필요하고
2.X 버전대는 자바 1.2 이상이 필요합니다… (호환성 뭐야?)
거두절미하고 어떤 클래스와 메소드가 있는지 봅시다.
https://javadoc.io/doc/commons-lang/commons-lang/2.6/index.html
보면 바로 알겠지만, 클래스 몇 개 없구요, 메소드들이 거의 다 static 입니다.
대부분은 객체생성 없이 바로 메소드만 불러다 쓸 수 있습니다.
org.apache.commons.lang.SystemUtils

이 화려한 상수 목록들 좀 봅시다.
운영체제를 이렇게 쉽게 탐지가 가능합니다.
폰트도 알아낼 수 있고요.
상수들 더있습니다. JAVA_HOME 도, 현재 실행중인 자바 런타임의 버전도 알아낼 수 있습니다.
동일 패키지 내 StringUtils 에 있는,
NullPointer 오류 걱정이 없이 문자열을 다루는 static 메소드들입니다.
isEmpty 있는 거 보소?
문자열 둘을 넣어 비교하고, 차이점을 리포트로 만들어 반환하는 difference 메소드도 있네요.
길이 지정하면 양옆에 공백을 적당히 넣어 길이 맞추는 center 메소드도 있습니다.
길이를 같이 지정하면, ellipsis 효과 (자르고 뒤에 … 처리) 주는 abbreviate 메소드도 있습니다.

이외에, Mutable 한 정수, 실수, bool 타입도 있고 (얘낸 예외적으로 객체 생성형 타입입니다.)
흔히들 Util 클래스에서 만들어 호출해 쓰던 거의 모든 것이, 이 안에 있습니다.
라고는 하지만, 웬만한 라이브러리들 죄다 얘는 기본으로 갖다 쓰거든요.
그래서 스프링 프로젝트들 웬만한 건 다 얘 이미 들어가 있을 겁니다. 의존성에만 들어가 있을 뿐 기능을 쓴 게 아니라는 게 문제죠.