String s = new String("따라하지마세요");
String s = "good";
와 같이 고쳐 사용한다.String.matches
는 정규표현식으로 문자열 형태를 확인하는 가장 쉬운 방법이지만, 성능이 중요한 상황에서 반복해 사용하기엔 적합하지 않다.private static final Pattern ROMAN = Pattern.compile(
"^(?=.)M*(C[MD]|D?C{0,3})"
+ "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
static boolean isRomanNumeralFast(String s) {
return ROMAN.matcher(s).matches();
}
private static long sum() {
Long sum = 0L;
for (long i = 0; i <= Integer.MAX_VALUE; i++)
sum += i;
return sum;
}
위 예제를 잘 보면..
Long 인 sum에 long인 i를 더해주면서 계속해서 오토박싱이 일어나 심각한 성능저하를 일으킨다.😩
하지만 필요한 상황에서 객체를 재사용했을 때의 피해가 필요 없는 객체를 반복 생성했을 때의 피해보다 훨씬 크다. 즉, 방어적복사에 실패하여 발생되는 보안 이슈나 버그보다는 불필요한 객체를 재사용하는 것은 그저 코드 형태나 성능에만 영향을 줄 뿐이다.