본문 바로가기

리뷰

나쁜 프로그래밍 습관 잡기!

반응형



오늘 수업을 듣다가 문득 깨달은 것이 있다. 내가 교수님이 말씀하신 나쁜 프로그래밍 습관에 거의 다 해당한다는 것이다..ㅠㅠ

다시는 안좋은 습관을 들이지 않도록 오늘은 몇 가지의 나쁜 프로그래밍 습관에 대해 정리해 보려고 한다.



1) for loop에서 변수선언 하지 않기


평소 for문 밖에 변수를 쓰는 것이 좋다고 들어 왔고,

왠지 그냥 내 생각에도 for문 밖에 변수를 선언하는 것이 프로그램 성능을 더 좋게 할 것 같았다. 

그래서 이에 대해 알아보았지만, 아직 정확한 이유를 찾지 못했다. 

지금까지 찾아본 결과로는 컴파일러가 어떤 컴파일 방식을 가지고 있느냐에 따라 

수행결과가 크게 달라지는 걸로 보인다.


예를 들어, 어떤 경우에서는 컴파일러가 최적화 과정을 자동으로 거쳐서 

for문 '안'에 변수를 선언한 프로그램이 for문 '밖'에 변수를 선언한 프로그램보다 

더 빠르게 돌아갈 수 있다는 것이다.

하지만 지금까지 많은 사람들이 for문 밖에 변수를 선언하는 것을 원칙으로 삼아온 만큼, 

조금 더 그 이유를 찾아보고 글을 업데이트 해야 할 것 같다.



2) branch 수를 많이 두지 않기


듣기로는 소프트웨어 엔지니어로써 회사 인터뷰를 볼 때 얼마나 많은 branch, 즉 얼마나 많은 if문이 들어갔는지에 따라 점수가 깎이는 경우가 있다고 한다.. (확실한 정보는 아님!)

그만큼 프로그램의 성능에 영향을 주는 요소라는 걸 기억해야 할 것 같다.


여기서 중요한 것은,

if문을 쓸 때 likely와 unlikely를 사용하면 

컴파일러에게 어떤 코드를 좀 더 predict하라는 힌트(?)를 줄 수 있다는 것이다.

그러면 여러 if문과 else문 등이 있더라도 컴파일러가 더 likely한 조건문을 먼저 보도록 해서 

좀 더 최적화된 결과를 낼 수 있게 된다.


주로 리눅스 커널 코드에서 사용되는 것 같은데

C언어 에서는 __builtin_expect(!!(x),1) 을 사용하면 된다고 한다.

*unlikely의 경우 0


반응형