Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[최현식] CH02 - 주석이 성능에 영향을 미칠까요? #1

Open
chhs2131 opened this issue Apr 3, 2023 · 2 comments
Open

[최현식] CH02 - 주석이 성능에 영향을 미칠까요? #1

chhs2131 opened this issue Apr 3, 2023 · 2 comments

Comments

@chhs2131
Copy link
Member

chhs2131 commented Apr 3, 2023

🤔 왜 이슈를 생성했나요?

주석(어노테이션을 제외한 // /**/)은 로직에 영향을 주지 않습니다. 그렇다면 성능에도 영향을 주지 않을까요? 런타임과 빌드타임 관점에서 궁금증이 들어서 확인해봤습니다. 과연 성능에 차이가 생겼을까요? 차이가 났다면 얼마나 생겼을까요!


😁 공유하고 싶은 내용 : 주석은 성능에 영향을 미치지않는다고 했는데, 정말일까?

들어가며

대충 감은 잡히시겠지만! 한번 생각해보시면 좋을 것 같습니다.
그리고 생각하신 결과와 같은지 비교해보시면 재밌을 것 같아요 😄

_

결과

프로그래밍에서 주석은 코드를 이해하고 유지보수할 때 매우 유용합니다. 그러나 이러한 주석이 프로그램의 성능에 영향을 미치지 않는다는 것이 일반적인 생각입니다.

그렇다면 주석이 코드의 성능에 영향을 미치지 않을까요? 이 질문에 대한 답은 "그렇지 않다" 입니다. 주석은 프로그램의 런타임 성능에는 영향을 미치지 않습니다. 그러나 빌드 타임에는 영향을 미칠 수 있습니다.

아래 테스트를 참고해주세요 :)


테스트
단순한 주석으로 50만 라인(80mb)을 채우고, 빌드 타임 및 런타임 성능을 비교했습니다.
image


테스트 결과

런타임 확인 결과

  • 주석이 런타임 성능에 영향을 미치지 않습니다.
  • 주석 크기가 작든 크든 같은 유사한 실행시간을 보입니다.
  • 즉, 빌드된 파일에는 주석이 존재하지 않기 때문에 실행시간 차가 없는 것으로 보입니다.

빌드 타임 확인 결과

  • 주석은 빌드 타임에 영향을 미칩니다.
  • 로직에 복잡도 등에 따른 문제가 아니라, 단순히 파일 내용을 읽는 시간이 증가한 것 같습니다.
  • 그러나, 순수 주석 80MB 정도마다 빌드 타임이 1초 증가하는 것으로 확인되었습니다.
  • 즉, 사실상 주석의 양을 신경쓰면서 코드를 구성해야되는 수준이 아닙니다. ☺

📌 참고자료, 공유하고 싶은 자료

_

image

@JaeHongDev
Copy link
Member

저도 궁금했던 내용이라서 실제로 한번 빌드 테스트를 해봤습니다.

다음은 주석이 있는 자바 파일과 주석이 없는 자바 파일을 각각 생성해주는 자바스크립트 파일입니다.

const fs = require('fs');

const code = "//주석입니다\n".repeat(10000000);
const javaTextFile = `
public class Comment{
    public static void main(String ...args){
        ${code}
    }
}
`;
fs.writeFile("Comment.java",javaTextFile,()=>{

});

const noCommentJava = `
public class NoComment{
    public static void main(String ...args){

    }
}
`
fs.writeFile("NoComment.java", noCommentJava,()=>{})

image

실제 빌드 시간은 확실하게 차이가 있는 것 같습니다.

Comment.java 는 대략 10000000줄이 넘는 주석이 있는 코드이고 밑에 NoComment.java 는 아무것도 없는 파일입니다.

반면에 실행시간은 거의 차이가 없었습니다.

스크린샷 2023-04-03 오후 11 31 27

그렇다면 과연 주석이 아닌 다른 코드라면 빌드 시간이 차이가 나는지 궁금해서 한번 추가로 스크립트를 작성해봤습니다.

fs.writeFile("Code.java", `
public class Code{
        public static void main(String ...args){
                ${new Array(10000000).fill(0).map((_,index) => index).map((index)=> `final var variable${index}=1;`).join(" ".repeat(8) +"\n")}
        }
}
`,()=>{})

variable{0…1000000} 변수들에 1을 대입하는 코드입니다.

스크린샷 2023-04-03 오후 11 42 37

처음에는 주석이 빌드시간에 영향을 준다고 생각했지만 단순히 컴파일러가 소스코드를 읽는 시간에 불과하다는 생각이 듭니다.
결국 주석으로 채워진 자바 코드와 변수 대입으로 채워진 자바코드를 각각 실행시켜보면 변수 대입으로 채워진 코드의 빌드시간이 더 느리다는 것을 알 수 있습니다.

결론

개인적인 견해로 주석은 빌드, 런타임시간에 그렇게 큰 영향을 주는 것은 아니다 라고 생각합니다.

@HiiWee
Copy link
Member

HiiWee commented Apr 4, 2023

새로운 이슈를 통해 의견을 작성했습니다!
#6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants