실제로 JAVA로 코딩 연습을 하면서

 

같은 역할을 하는데 연산 속도가 늘어나는 경우를 적어본다.

 

 

< 객체 타입을 바꾸는 연산들 >

 

StringBuilder 에 두 개의 integer 를 넣어야 하는 일이 있었다.

 

int a = 1;

int b = 2;

 

StringBuilder sb = new StringBuilder();

 

위의 상황에서 결과값으로 12 를 출력하기 위해 아래와 같이 했는데

 

sb.append(String.valueOf(a)+b);

 

시간이 엄청나게 길어졌다.

그래서 아래처럼 바꿨다.

 

sb.append(a);

sb.append(b);

 

시간이 대폭 줄었는데, 이로 미뤄보아 String.valueOf 가 엄청나게 무거운 연산인 것 같다는 생각이 듦.

객체의 타입을 바꾸는 연산(Integer.valueOf 나 Double.valueOf.... etc) 은 되도록 사용하지 말아야 겠다는 생각.

(parseOf 는 얼마나 오래걸리는지 보지 못함)

 

 

 

< 두 값 중 최대값은? >

 

두 int 변수에서 큰 값을 구하려고

 

Math.max(a,b)

 

이렇게 했는데 시간이 좀 오래 걸려서 아래처럼 함.

 

int max = a;

if(a<b) max = b;

 

또한 3항연산자를 사용하여 더 큰 값을 구하는 경우도 있었는데 효율이 좋지 못했음.

3항연산자는 되도록 쓰지 말아야겠더라.

 

 

 

 

< StringBuilder vs StringBuffer >

 

StringBuffer 는 multi-thread 환경에서 안전할 수 있도록 thread-safe 하기 때문에 연산 처리가 느리고

StringBuilder 는 thread-safe 하지 않기 때문에 연산 처리가 빠르다.

 

따라서 코딩 인터뷰를 볼 때 multi-thread 같은 환경 조건인지 보고 더 나은 것을 선택하는 게 좋겠다.

 

 

 

< length >

 

String str = "abcde" 가 있다.

이 str 을 charAt으로 하나씩 뽑아서 출력한다고 하자.

 

for(int i=0; i<str.length(); i++) 

 

위의 for문에서, 중간 연산 length 가 계속 호출되기 때문에 성능에 악영향을 준다.

아래처럼 size 를 미리 계산해 둔 다음에 그 값을 계속 이용하는 것이 낫다.

 

int size = str.length();

for(int i=0; i<size; i++)

 

 

 

+ Recent posts