YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Korean subtitles

← 03-13 Container_Performance

03-13 Container_Performance

Get Embed Code
13 Languages

Showing Revision 5 created 04/29/2016 by nc_translator1.

  1. 저번 시간에 프로그램의 속도가 느린 원인이

  2. 하드웨어일 수 있다는 점에 대해 얘기를 했었죠
  3. 부동 소수점 로직이 분기문 로직 이후에
    위치해 발생한 문제 기억나시죠?
  4. 요즘 하드웨어에선 이런 문제가 발생하지 않는다고 생각하셔도 무방해요
  5. 하지만 한 가지 예외는 있어요
  6. 바로 여러분이 사용하는 언어의 기본 성능입니다
  7. 정렬같은 기본적인 알고리즘을 보세요
  8. 정렬 방법은 셀 수 없이 많죠
  9. 상황에 따라 몇 알고리즘이 다른 알고리즘보다 더 적합하고요
  10. 예를 들어 보통 퀵정렬은 버블정렬보다 더 좋지만
  11. 정렬하는 요소가 1천개 이하일 경우엔 그렇지 않아요
  12. 아니면 정렬된 리스트에서 객체를 찾을 땐
  13. 일반적으로는 이진 검색이 가장 효율적인 방법이에요
  14. 하지만 정렬되지 않은 리스트에서는 전혀 그렇지 않죠
  15. 각 객체의 값을 타겟 값과 비교하지 않고
  16. 해시 함수를 이용해 바로 찾을 수 있어요
  17. 방금 말씀드린 예시는 현대 컴퓨터과학과
    자료구조에서 사용하는 기본적인 법칙이에요
  18. 다행히 자바 같이 최근 개발된 언어는
    컨테이너와 알고리즘을 제공하기 때문에
  19. 여러분이 Murmur3 해시함수나 퀵정렬을
  20. 계속 작성하지 않아도 돼요
  21. 하지만 한 가지 말씀드릴게요
  22. 제가 몇년 동안 프로그래밍을 해보며 관찰한
  23. 모든 프로그램의 성능 문제는 부분적으로라도
  24. 언어가 제공하는 컨테이너 때문에 발생해요
  25. 물론 좋긴 하죠
  26. 자바가 제공하는 벡터 클래스로
  27. 여러분이 push, pop, add, remove를 사용할 수 있어요
  28. 하지만 그런 유연성을 위해서 자바는 연결 리스트 구조를 사용해야 해요
  29. 연결 리스트는 성능 측면에서 특이한 자료구조에요
  30. 연결 리스트의 앞부분에 작업을 하면 속도는 매우 빨라요
  31. 하지만 리스트의 중간에 insert나 remove를 하면
  32. 효율성은 최악이 됩니다
  33. 시스템이 아무리 편리한 컨테이너를 제공한다고 해도
  34. 여러분의 프로그램이 제공된 컨테이너를
    효율적으로 활용할 거란 보장을 할 수 없어요
  35. 제임스 서덜랜드는 자바 프레임워크가 제공하는
    자료구조에 대한 성능 벤치마크를 발표했는데요
  36. 벤치마크를 보면 성능과 기능성에 대한 괴리가 있다는 걸 알 수 있어요
  37. 예를 들어 Hashtable 성능이
  38. HashMap 성능보다 22% 더 빠를 수도 있어요
  39. 컨테이너를 사용하는 방식에 따라 말이에요
  40. 중요한 건
  41. 여러분께서 사용하시는 컨테이너 클래스를 프로파일링 하셨는지에요
  42. 가장 효율적인 컨테이너를 사용 중이신지 확인하셨나요?
  43. 여러분의 코드가 실제로 수행하는 작업에 대해서 말이에요
  44. 흠 그럴 줄 알았어요
  45. 다행히도 안드로이드에서 컨테이너의
    성능을 파악할 수 있는 MPI를 제공해요
  46. 그럼 크리스의 코드가 저희의 정밀 조사를 감당할 수 있을지 한번 보아요