String s = new String("bikini");
==================================
// 하나의 String 인스턴스를 사용하는 방식으로 바꾼 올바른 예시
String s = "bikini";
String
인스턴스를 매번 새로 만드는 코드 이므로, 앱 내부에서 String
인스턴스가 수백만 개 가 만들어질 수 있다.[Item1] Constructor 대신 Static Factory Method를 고려하라 에서 정적 팩터리 메서드는
위의 이점을 가진다.
Boolean(String)
의 생성자 대신 Boolean.valueOf(String)
팩터리 메서드를 사용하는 것이 좋다.
public static long sum() {
Long sum = 0L;
for(long i = 0;
i<Integer.MAX_VALUE; i++) {
sum += i;
}
return sum;
}
public static long sum() {
long sum = 0L;
for(long i = 0;
i<Integer.MAX_VALUE; i++){
sum += i;
}
return sum;
}
public class PhonePatternUtil {
...
public boolean isValid(String phone) {
}
}
null
을 표현하고 싶을 때는 Boxing type 을 쓰는 것이 좋다.
int prive;
0
인 것과 null
인 것의 의미는 다르다.null
의 경우 아직 가격이 정해지지 않았다고 생각 될 수도 있다.static boolean isEmailValid(String s) {
return s.matches("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}");
}
isEmailValid("lydia@gmail.com")
은 내부적으로 Patten.java
의 matches
를 수행하게 되는데, Pattern.complie(regex)
를 통해 매번 패턴에 대한 객체를 생성하게 된다.isEmailValid
를 수행할 때마다 계속 똑같은 패턴의 인스턴스를 만들게 되는 것이다.public class EmailUtil {
private static fimal Pattern EMAIL =
Pattern.complie("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}");
static boolean isEmilValid(String s){
return EMAIL.matcher(s).matches():
}
}