강의에서 어떤 연산들은 성능에 큰 영향을 줄 수 있어
이 연산을 우회하는 등을 권장한다고 배웠다.
강의에서 나온 것 외에도 주의를 요하는 연산이 어떤 것인지 정리해보려한다.
float a = 10 / 2f;
float b = 10 * 0.5f; // 이게 더 빠르다.
아래와 같은 변수들을 계산한다고 해보자.
Vector3 vec = Vector3.one;
float a = 5f;
float b = 20f;
무심코 이렇게 계산하면 많은 비용이 사용한다.
Vector3 vec2 = vec * a * b;
(vec.x * a, vec.y * a, vec.z * a) // 이렇게 각 자리에 곱해진다.
(vec.x * b, vec.y * b, vec.z * b) // 이렇게 또 각 자리에 곱해진다.
곱 연산이 도합 6번 일어난다.
이때 연산의 순서를 다음과 같이 바꾼다면
Vector3 vec3 = a * b * vec;
a * b의 곱 연산이 먼저 실행되고, 그 다음에 vec과 곱 연산을 수행한다.
(ab * vec.x, ab * vec.y, ab * vec.z) // 이렇게 곱한다.
결과는 동일한데 이 방법이 곱 연산이 4회 일어나므로 더 효과적이라 할 수 있다.
이번에는 사소한 연산에 대해서만 정리했다.
Unity에서 지원하는 메서드에 대해 찾아보면 더 많은 양의 최적화 방법과 유의사항이 있다보니
시간을 들여서 정리할 필요가 있다.
Unity가 개발하기 편하게 지원하는 메서드 중에는 생각 이상으로 성능에 큰 영향을 미치는 경우가 많다.
사람이 보기에는 속도에 차이가 없다고 느끼겠지만 컴퓨터가 연산을 수행하는 과정은
생각지 못한 장황한 절차를 거치기도 한다.
그러므로 코드를 짜고나서 리팩토링과 함께 값비싼 연산을 사용하진 않았는지도 꼭 체크할 필요가 있다.
#내일배움캠프 #스파르타내일배움캠프 #스파르타내일배움캠프TIL