1. 반복문을 줄여야 한다.
=> 리소스를 계속 사용하기 때문에
2. Dynamic Lookup을 줄인다.
=> instanceOf()와 같은 메서드
3. 필요시 순수 함수 형식으로 코드 짜기(객체뿐만 아니라 함수도 모듈화가 된다)
=> 당연히 필요시에는 OOP 준수(Real-Time과 같은 쓰레딩 부분 등 Critical 한 부분)
4. Stream과 Collection, 기본적인 속도는 for 문이 Stream 보다 빠르다.
=> 기존 Collection을 재사용해야 되는데, Collection의 변경이 필요한 경우
=> Prototype으로
5. Object 클래스의 메서드 Overriding
=> 자주 사용하는 메소드 : equals(), hashCode(), clone(), toString()
6. 배열 복사할 때, System.arraycopy() 사용
=> native로 되어있기 때문에 좀 더 최적화가 되어있다.
7. Comparator & Comparable Interface 사용
=> compare(T o1, T o2) & copareTo(T o) 메서드 이용
=> 배열 Sort : Arrays.sort()
=> Collection Sort : Collection.sort()
8. 문자열의 추가, 수정, 삭제가 빈번한 경우, StringBuffer & StringBuilder
=> String은 immutable 속성을 가지기 때문에 변경이 불가
=> StringBuffer는 동기화 키워드를 지원하므로, 멀티스레드 환경에서 안전하다.
=> StringBuilder는 동기화를 지원하지 않기 때문에, 단일 스레드 환경에서 성능이 더 좋다.
=> Example
public class Main {
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
int k = Integer.parseInt(br.readLine());
System.out.println(((int)Math.pow(2, k) - 1));
move(k, 1, 2, 3);
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void move(int k, int src, int mid, int dst) throws IOException {
if (k > 0){
move(k-1, src, dst, mid);
bw.write(src + " " + dst + "\n");
move(k-1, mid, src, dst);
}
}
}
9. String <-> 기본 자료형 변경할 때
=> 기본 자료형으로 변경 : Integer.parseInt()
=> 클래스형으로 변경 : Integer.valueOf()
10. Math 클래스 메소드 활용을 줄이자
1) *2 or /2의 경우, Shift 연산자 활용
=> * 2 : <<
=> / 2 : >> 또는 * 0.5를 이용하자
2) Math.floor()과 Math.ceil 대신 int 활용
=> Math.floor() : int(3.5)
=> Math.ceil() : int(3.5) + 1
3) Math.abs() 대신 * -1 활용
=> Math.abs() : (a > 0) ? a : a * -1
=> 출처 : rockonflash.wordpress.com/2007/08/11/optimizations-for-as3-calculations/
* 계속 추가될 예정
'Coding > Java' 카테고리의 다른 글
Java Collection Framework (0) | 2020.10.08 |
---|---|
Java I/O Stream (0) | 2020.10.08 |
Java Code Convention(Google Java Style 정리) (0) | 2020.10.07 |
java.lang 패키지 (0) | 2020.09.29 |
Java Stream API (0) | 2020.09.28 |