벌써 3번째입니다. ^^
오늘 주제는 작은 함수에 대한 부분인데요. 여기서 말하는 함수라는 것은 메서드단위로 생각하시면 됩니다.
사실 메서드 보다는 JIT에 대한 이해라고 생각하셔도 됩니다.
아시다시피 우리가 작성하는 C#, VB기타 소스코드는 컴파일되면 MSIL이라는 중간언어로 생성됩니다. 이는 닷넷런타임에서 JIT컴파일러가 이 MSIL코드를 머신(machine) 코드로 바꾸도록하는 것이지요~ 여기서 JIT 컴파일러가 IL코드를 읽어오는 부분을 보시면 왜 우리가 작고 간단한 메서드로 구현을 해야하는지 알게 됩니다.
저희는 다음과 같이 소스코드를 작성했습니다.
public static string BuildMsg(bool takeFirstPath) private static string SecondPath() private static string FirstPath() public static string BuildMsg2(bool takeFirstPath) |
위 소스코드의 IL을 IL 디어셈블러로 확인해보면 다음과 같이 메서드 단위로 떨어지는 것을 볼 수 있습니다.
함수 하나를 클릭해서 상세히 살펴보겠습니다.
함수 하나를 호출할 경우 해당 메서드 안에 있는 코드 모두를 로드하게 됩니다. 그렇다면 메서드 안에서 다른 메서드를 호출하는 경우는 어떨까요?
아래 처럼 call이라는 코드를 보실 수 있습니다. 분개부분에서 필요한 메서드만 다시 호출하게 되는거죠. 결국 사용하지 않는 리소스를 로드하지 않아 JIT컴파일러는 보다 효율적으로 실행 될 수 있겠죠? 바로 이 점때문에 저희는 작고 간단한 메서드 단위로 코딩을 해야하는 이유입니다.