String s = new String("psj") // 안좋음 --
String
인스턴스를 만든다.String s = "psj"; //조음
String
인스턴스를 재사용한다.Boolean b = Boolean.valueOf("true")
같이 Boolean(String) 생성자 대신 Boolean.valueOf(String) 팩토리 메서드를 사용함으로 새로운 객체를 만들지 않고 재사용이 가능하다.
public class BooleanCheck {
public static void main(String[] args) {
Boolean a = new Boolean(true);
Boolean d = new Boolean(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(true);
System.out.println(a == d); // false
System.out.println(b == c); // true
}
}
생성 비용이 비싼 객체는 캐싱하여 재사용하는 것이 좋음.
static boolean isRomanNumeral(String s) {
return s.matches("^(?=.)M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
}
"^(?=.)M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$"
같은 정규표현식 문자열이 계속적으로 사용되는 경우는 비효율적입니다.Pattern
인스턴스를 생성하기에, 성능 저하가 우려된다.public class RomanNumerals {
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 isRomanNumeral(String s) {
return ROMAN.matcher(s).matches();
}
}
Pattern
을 미리 static 으로 올려놓고 재사용하도록 합니다!기본 타입과 박싱된 기본 타입을 자동으로 상호 변환해주는 기술
성능에 영향을 줄 수 있음.
private static long sum() {
Long sum = 0L;
for (long i = 0; i <= Integer.MAX_VALUE; i++)
sum += i;
return sum;
}
for 문 안에서 불필요한 Long
인스턴스를 약 2^31개나 만들어낸다..
개선한다면?
private static long sum() {
long sum = 0L;
for (long i = 0; i <= Integer.MAX_VALUE; i++)
sum += i;
return sum;
}