Invincible-Backend-Study / java-basic

자바 기본서를 통한 기초 다지기 스터디!
0 stars 6 forks source link

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

Open chhs2131 opened 1 year ago

chhs2131 commented 1 year ago

🤔 왜 이슈를 생성했나요?

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


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

들어가며

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

_

결과

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

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

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


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


테스트 결과

런타임 확인 결과

빌드 타임 확인 결과


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

_

image

JaeHongDev commented 1 year ago

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

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

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 commented 1 year ago

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

6