Sabotage Performance

  • 일반적인 성능을 저하시킬 수 있는 안티 패턴

1. 루프의 문자열 연결

val n: IntRange = 1..10

var result: String = ""
for ( i in n ) {
    result += i
}

val builder:StringBuilder = StringBuilder()
for ( i in n ) {
    builder.append(i)
}
  • 루프를 반복할 때마다 새로운 문자열 객체가 생성되어 불필요한 메모리 할당이 벌어진다.
  • StringBuilder를 사용하는 것이 나을 수 있다.

2. 과도한 객체 인스턴스화

  • 애플리케이션이 객체를 너무 많이 생성하면 메모리 사용량이 증가하고 CG가 자주 발생해서 애플리케이션 성능이 저하될 수 있다.
  • 최대한 객체를 재사용하거나 Pooling을 사용하는 방법도 있다.

3. 비효율적 데이터 구조

  • 예를 들어 무작위 액세스가 필요한 경우 LinkedList를 사용한다던가 하면 성능이 저하될 수 있다.

4. 비효율적 알고리즘

  • 상황에 맞는 알고리즘을 사용하지 않으면 성능 병목이 생길 수 있다.
  • 예를 들어 O(n)인 알고리즘인 경우 길이가 길면 성능 저하가 발생한다.

5. 적절한 예외 처리 부족

  • 부적절한 예외 처리는 성능에 영향을 미친다.
  • 필요 이상으로 높은 수준에서 예외를 잡거나 예외를 과도하게 로깅해도 성능이 저하된다.