이런 허접한 내용을 올려도 될지는 모르겠지만, 얼마전에 이 내용을 보고 궁금해서 저도 해봤습니다.
get, set을 이용한 변수 접근과 직접 접근하는 방법의 실행시간 이라고 해야 하나요
일단 다음과 같은 두 클래스를 만들어서 각각 10000000번씩 변수를 값을 받아오고, 값을 할당하는 동작을 실행했습니다.
public class testClass_1 { int i; public testClass_1() { i = 0; } public int getI() { return i; } public void setI(int i) { this.i = i; } } public class testClass_2 { public int i; public testClass_2() { i = 0; } }
그랬더니 실행시간 차이가
이정도 납니다.. 문서에서는 대략 두배 정도라고 한거 같은데, 단말에 올려서 그런지 더많이 나는듯하네요 시간단위는 밀리세컨드입니다.
오늘 회사 개발서버가 다운되서 할일없어진 신입사원이 올려봤습니다 ...
이글 회사사람들이 보면 안되는데...
물론 다이렉트로 접근하면 빠른게 당연하지만 생각보다 그 속도차이가 크다고 생각하시는군요.
하지만 1번 엑세스하는데
13193/20000000 = 0.00065965ms = 0.00000065965초
3777/20000000 = 0.000188885 = 0.000000188885초
단순히 성능을 배수로 비교해보면 3.5배정도라서 큰차이가 나고 성능상에서 많은 불이익을 가져오는것 같지만
실제 프로그램 실행단계에서 0.0000007초와 0.0000002초의 차이가 크게 느껴질까 한번생각해보는것도 좋을것 같습니다.
사실 성능만 생각한다면 중복 생각하지않고 클래스도 안만들고 함수도 안만들고 Main함수에 그냥 통으로 무조건 집어넣는게 제일빠릅니다.
심지어 편하게쓰는 for문같은 반복문도 쓰지말고 통으로 그냥 소스처리하는게 더 빠르죠.
하지만 이런식의 코드작성은 소스유지보수성 및 안정성에서 불리합니다. 컴퓨터는 저희가 생각하는것보다 빠릅니다. ㅎㅎ
프로그래밍에도 80/20의 법칙이란게 있습니다. 이부분에 대한설명은 한번 검색을 해보시는것도 좋을것같습니다.
혹시나 이런 분석을 보고 인캡슐화 및 여려가지 객체지향적인 즉 유지보수성과 안정성을 가지는 좋은 프로그래밍 습관을 버리는 분이 계실까봐 감히 글을 적어봅니다.