본문 바로가기

프로그래밍/Java 프로그래밍

자바 프로그램의 가독성과 효율성

오늘은 기본적인 프로그램의 예제에 대해 살펴보고 효율성과 가독성에 대해 얘기해보겠습니다. 요즘 컴퓨터가 많이 좋아져서 메모리도 커지고 CPU도 빨라 졌습니다. 제가 처음에 프로그램을 할 때는 효율성이 가장 중요한 덕목이었습니다. 지금은 가독성이 더 중요하다는 얘기를 많이 합니다. 그래야만 유지보수도 편하고 대형 프로젝트에서 다른 사람들과 협업할 때도 도움이 됩니다. 물론 자바가 효율성을 앞세운 프로그래밍 언어는 아니지만 그렇다고해서 아주 느린 프로그래밍 언어도 아닙니다. 주로 대형 프로젝트나 인터넷, 모바일 프로그래밍에 적합한 언어이기는 합니다. 하지만 자바가 어느기기에도 들어가도록 프로그래밍을 할 수도 있고 효율적인 프로그래밍이 필요한 경우도 있습니다. 물론 아주 효율적인 프로그래밍을 하려면 C를 이용하는 것이 더 좋은 방법이 될 수도 있지만 자바를 이용해도 충분히 효율적으로 프로그래밍할 수 있습니다. 그것은 효율적인 알고리즘을 이용하면 됩니다. 너무 효율성을 따지만 오히려 역효과가 날 수도 있지만 간단한 알고리즘 변화로 효율성을 증가시킬 수도 있습니다. 예를 들어, 몇가지를 살펴보겠습니다.


1. 1부터 100까지 숫자 중에서 3의 배수의 합을 구하시오.



보통 위와 같이 프로그램하고 책에서도 그렇게 나옵니다. 위의 경우를 보면 for문은 1부터 100까지 100번을 돌아야하고 매번 if문으로 비교를 해야하고 i % 3 이라는 % 연산을 해야합니다. 단순히 100까지의 합이기때문에 큰 문제는 없지만 100이 아닌 엄청나게 큰 숫자라면 굉장히 비효율적인 프로그램입니다.



위의 프로그램은 for문이 33번만 돌면되고 if문이 필요없습니다. 100이 아닌 훨씬 큰 숫자라면 좀 더 효율적인 프로구램이 될 수 있습니다. 이 경우는 프로그램이 어렵지도 않으니까 가독성도 문제가 없습니다. 이번에는 이것보다 좀 더 복잡한 문제를 해보겠습니다.



2. 입력받은 값이 소수인지 확인하고 소수인지 아닌지를 출력하십시오.

   소수는 1과 자기자신 외에는 나누어지지 않는 수를 말합니다.




예전에 신입들에게 위의 프로그램을 작성하도록 숙제를 냈었는데 한명만 풀었었고 그나마도 아래와 같이 작성을 했습니다. 말그대로 소수의 정의를 이용한 프로그램이었습니다. 2부터 받은 값보다 하나 작은 수까지 나누어서 나누어지지않으면 소수이고 중간에 나누어지면 소수가 아닌 것으로 판단하고 출력을 했습니다. 이 프로그램이 틀렸다는 것이 아닙니다. 이것도 제대로 된 결과를 출력합니다. 그래서 정당한 프로그램이기는 하지만 굉장히 비효율적인 프로그램입니다. 제가 일부러 굉장히 큰 수를 넣었을 때 효율적인 프로그램과 엄청난 차이가 났었습니다. 위의 프로그램은 큰 수를 넣었을때 1시간이 넘는 시간이 걸렸지만 효율적인 프로그램은 1분도 안되서 결과가 나왔습니다. 위와 같은 프로그램을 실제로 현업에서 작성할 일은 없을 것입니다. 하지만 분야에 따라 이런 식의 수학적인 것도 고려해봐야할 때가 있을 것입니다. 위의 프로그램은 실행한지 1시간이 훨씬 지났지만 결과가 나오지 않아서 제가 중단시켜야 했습니다.




위의 프로그램은 같은 숫자를 넣을 때에 단 2초만에 결과가 나왔습니다. 여러분에게 가독성보다 효율성이 더 중요하다는 얘기를 하는 것이 아닙니다. 저도 오늘날에는 가독성이 더 중요하다고 생각합니다. 하지만 초급 프로그래머들이 효율성은 아예 무시하고 프로그램을 하는 것을 보면 아쉬울 때가 있습니다. 오랜시간이 걸리지 않는 것이라면 미리 효율성도 살펴보는 것이 좋은 프로그램을 하는 기본이라고 할 수 있겠습니다.

'프로그래밍 > Java 프로그래밍' 카테고리의 다른 글

자바의 상속  (0) 2020.07.15
자바 패키지와 접근제한자  (0) 2020.07.14
자바 싱글톤과 상수  (0) 2020.07.11
자바 인스턴스 멤버와 정적 멤버  (0) 2020.07.10
자바의 메소드  (0) 2020.07.09