섣부르지 않은 최적화 기법
컴퓨터공학에서 '최적화'라는 말은 굉장히 그럴듯한 느낌을 줍니다. 하지만, 섣부른 최적화는 오히려 아키텍처나 가독성을 해치는 일이 될 수 있는데요. 최적화와 관련해 좋은 사례가 있어서 정리해보았습니다. 자세한 코드 예시들과 함께 본문을 공부해보시길 바랍니다! 📌 최적화를 위한 5가지 기법 1. 동적 배열의 용량(capacity)를 집작하고 있다면 미리 선언한다. - 동적 배열의 용량을 늘리는 연산이 꽤 비싸기 때문이다. 동적 배열을 선언할 때 용량을 지정해주는 것 만으로 4배 이상의 성능 개선 효과가 있다. 2. 반복문 안에서 파일 출력은 최대한 피한다. - 응용 프로그램이 파일을 출력하기 위해 운영체제에 보내는 시스템 콜은 비싼 연산을 필요로 한다. 반복문 안에서 파일을 출력하면 반복문의 횟수만큼 시스템 콜을 해야 한다. 3. 문자열이 불변(immutable) 객체일 경우 덧셈을 반복하지 않는다. - 문자열 객체는 생성 후 변경이 불가능하다. 이를 허용하는 파이썬에서는 이 연산이 동적 배열을 확장할 때와 같은 원리로 일어나기 때문에, 반복문에서 복사를 계속 수행하면 성능에 영향을 미칠 수 있다. 4. 멀티 쓰레딩을 '적절히' 활용한다. - 코드의 동시성이 무조건 빨라지는 것을 의미하지 않는다. 쓰레드를 할당하고 관리하는 작업 역시 성능에 영향을 끼친다. - 멀티쓰레딩의 코드 복잡도를 증가시킬 수 있다. 공유 자원이 많을 경우, 디버깅의 난이도가 급상승한다. 5. 생성에 오랜 시간 걸리는 객체가 있다면 미리 만들어둔다. - 객체를 미리 만들 경우 싱글 쓰레드 버전은 약 17%, 멀티쓰레드 버전은 약 14% 감소한다.