객체의 파괴

박근수·2024년 11월 26일
0

01. 불필요한 객체 생성 금지

public static long sum(){
	Long sum = 0L; (X)
    
    long sum = 0L: (O)
    //이 메서드가 위에 메서드에 비해 10배 정도 빠른 속도를 나타내었다.
    //Boxing type을 남용하지 않도록 주의하는 것 뿐만 아니라, 의도치 않은 Auto Boxing을 조심하라
    
    for(long i = 0; i < Integer.MAX_VALUE; i++{
    	sum += i;
    }
    
    return sum;
}

최적화된 valid Check Util

Pattern insatance가 매번 생성

static boolean isEmailVaild(String s){
	retur s.mathes("[a-zA-Z0-9.-]\\\\\.[a-zA-Z]{2,6}$");
}

Pattern instance가 한 번만 생성 (최적화)

public class EmailUtil{t
	private static final Pattern EMAIL = 
    	Pattern.complie("[a-zA-Z0-9.-]\\\\\.[a-zA-Z]{2,6}$");
        
    static boolean isEmailValid(String s){
    	return EMAIL.matcher(s).matches();
    }
}

02. 다 쓴 객체 참조를 해제하라

유효 Scope 밖으로 넘어가면 자동으로 GC의 대상이 된다.

03. try-finally 대신 try-with-resources.

Try finally

//Exception 시 Stack trace에 어려움이 있음
static void copy(String src, String dst) throws IOException{
	InputStream in = new FileInputStream(src):
	try{
    	OutputStream out = new FileOutputStream(src):
        try{
        	...
        }
    }finally{
    	out.close();
    }
}finally{
	in.close();
}

Try-wirh-resource

public class Resource implements AutoCloseable{
	@Override
    public void close() throws Exception{
    	throw new Exception("...exception");
    }
}

try (Resource r1 = new Resource();
	 Resource r1 = new Resource();){
     	throw new Exception("asd):
     }
profile
개발블로그

0개의 댓글