ํด๋น ์ฅ์์๋ ๋ถํ์ํ๊ฒ ๊ฐ์ฒด ์์ฑ์ ํ๋ 3๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๋งํด์ฃผ๊ณ ์๋ค. ํ๋์ฉ ์์๋ณด์.
1. ๋ฌธ์์ด
public static void main(String[] args){
String hello1 = "hello";
String hello2 = new String("hello");
String hello3 = "hello";
System.out.println(hello1 == hello2); // false // ๋ค๋ฅธ ์ธ์คํด์ค
System.out.println(hello1.equals(hello2)); // true // ๊ฐ์ ๋ฌธ์์ด
System.out.println(hello1 == hello3); // true // ๊ฐ์ ์ธ์คํด์ค
System.out.println(hello1.equals(hello3)); // true // ๊ฐ์ ๋ฌธ์์ด
}
hello1๊ณผ hello2๊ฐ ๊ฐ์ ๋ฌธ์์ด์์๋ ๋ถ๊ตฌํ๊ณ ๋ค๋ฅธ ์ธ์คํด์ค์์ ํ์ธํ ์ ์๋ค. JVM์ ๋ด๋ถ์ ์ผ๋ก ๋ฌธ์์ด์ ํ(pool)์์ ์บ์ฑํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์ผํ ๋ฌธ์์ด์ ํธ์ถํ๋ ๊ฒฝ์ฐ ์ฐธ์กฐ๋ผ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์์ด์ ์ฌ์ฌ์ฉํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ new String("hello")์ฒ๋ผ ๋ถํ์ํ๊ฒ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ์๊ฐ ์๋ค.
2. ์ ๊ท์, Pattern
public class RomanNuberals{
static boolean isRomanNumberalSlow(String s){
return s.matches("^(?=.)M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
}
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();
}
}
isRomanNumberSlow์์ "^(?=.)M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$"๋ผ๋ ์ ๊ทํํ์(ํจํด)์ ๋ฐ๊ฒ ๋๋ค. ๋ด๋ถ์ ์ผ๋ก ํจํด์ ์ปดํ์ผํ๊ณ ํจํด ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๊ณผ์ ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
๊ทธ๋์ ๋ง์ฝ ๋์ผํ ํจํด์ด ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ์ด ๋๋ค๋ฉด ROMAN์ฒ๋ผ ํ๋๋ก ์ ์ธ์ ํด์ ์ฌ์ฉ์ ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค. (isRomanNumeralFast ์ฐธ๊ณ )
3. ์คํ ๋ฐ์ฑ(auto boxing)
์คํ ๋ฐ์ฑ(auto boxing)์ด๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ธฐ๋ณธ ํ์ ๊ณผ ๋ฐ์ฑ ๋ ๊ธฐ๋ณธ ํ์ ์ ์์ด ์ธ ๋ ์๋์ผ๋ก ์ํธ ๋ณํํด์ฃผ๋ ๊ธฐ์ ์ด๋ค. ์กฐ๊ธ ๋ ์ ํํ๋ primitive ํ์ (int, long, boolean)์์ reference ํ์ (Integer, Long, Boolean)์ผ๋ก ๋ณํํ ๋๋ ๋ฐ์ฑ, ๊ทธ ๋ฐ๋๋ ์ธ๋ฐ์ฑ์ด ์ผ์ด๋๋ค.
public static long sum(){
Long sum = 0L;
for(long i = 0; i <= Integer.MAX_VALUE; i++){
sum += i;
}
return sum;
}
์์ ์ฝ๋์์ ๋ถํ์ํ Long ์ธ์คํด์ค๊ฐ (Integer.MAX_VALUE+1) ๊ฐ๋งํผ ๊ณ์ํด์ ๋ง๋ค์ด์ง๋ค. ๋ง์ฝ 'long sum = 0L;'๋ก ์ ์ธ์ ํ๋ค๋ฉด ๋ถํ์ํ ์คํ ๋ฐ์ฑ์ด ์ผ์ด๋์ง ์๊ฒ ๋๋ค.
์ด์์ผ๋ก ๋ถํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ 3๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์๋ค. ๊ทธ๋ ๋ค๊ณ "๊ฐ์ฒด ์์ฑ์ ๋น์ธ๋ ํผํด์ผ ํ๋ค."๋ก ์คํดํ๋ฉด ์ ๋๋ค. ํ๋ก๊ทธ๋จ์ ๋ช ํ์ฑ, ๊ฐ๊ฒฐ์ฑ, ๊ธฐ๋ฅ์ ์ํด์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ๋ ๊ฒ์ด๋ผ๋ฉด ์ผ๋ฐ์ ์ผ๋ก๋ ์ข์ ์ผ์ด๋ค.
ํด๋น ๊ธ์ ๋ฐฑ๊ธฐ์ ๋์ '์ดํํฐ๋ธ ์๋ฐ ์๋ฒฝ ๊ณต๋ต'์ ์๊ฐํ๊ณ ์์ฑํ ๊ฒ์ ๋๋ค.