브로드캐스팅과 레거시 코드
브로드캐스팅과 레거시 코드 (Broadcasting and Legacy Code)
브로드캐스팅 시맨틱스가 생기면서 이전 버전의 Octave나 MATLAB에서 잘 돌던 코드가 갑자기 망가지지 않을까 걱정될 수 있어요. 대부분은 영향을 받지 않지만, 정확히 어떤 경우가 예외인지 짚어볼 필요가 있어요.
출처: 문서
본문
새로운 브로드캐스팅 시맨틱스는 이전 버전의 Octave에서 동작하던 코드에 거의 영향을 주지 않아요. 그래서 이전 버전의 Octave에서 동작했던 MATLAB에서 물려받은 코드는 대부분 수정 없이 그대로 Octave에서 돌아가요.
유일한 예외는 크기가 다른 행렬을 만나면 오류가 발생하리라 기대했던 코드예요. 예를 들어 이런 코드가 있어요.
try
c = a.*b;
catch
c = a.*a;
end_try_catch
이런 연산은 이제 유효한 Octave 문법이 되었기 때문에, 더 이상 오류를 내지 않아요. 크기가 다른 두 행렬이 요소별 곱셈에 들어가면 브로드캐스팅이 일어나기 때문이에요. 이전처럼 오류를 의도해 처리하고 싶다면, 다음처럼 크기를 명시적으로 확인하는 코드를 쓰는 게 맞아요.
if (isequal (size (a), size (b)))
c = a .* b;
else
c = a .* a;
endif
즉, 이전 코드가 "크기가 다르면 오류가 나길 기대"하고 있었다면 그 기대가 깨질 수 있어요. 다른 모든 경우에는 기존 동작이 그대로 유지되니, 레거시 코드를 옮길 때 특별히 신경 쓸 부분은 이 한 가지로 생각하면 돼요.
더 알아보기
- 브로드캐스팅 기본 개념은 브로드캐스팅(Broadcasting) 항목에서 먼저 다뤄요.
- 벡터화와 더 빠른 코드 실행에서의 활용도 이어서 보면 좋아요.