[BE/JAVA] getter, setter Object vs parsing 속도비교

2021. 6. 9. 18:10
728x90
반응형

2021.06.09

37번째 포스팅

 

입사 93일차.

현재 진행하고 있는 프로젝트에서 merge를 진행하던 도중, 이름이 같지만 자료형이 다른 field가 있음을 알게 되었다.

개발서버에 배포를 진행하고 있던 도중이었기 때문에, Double.toString 메소드를 사용해서 parsing을 진행한 뒤, 결과가 정상적으로 출력되는 것을 확인하고 merge를 완료했다.

 

시간이 조금 지나고 당시에는 시간이 부족해서 메소드를 사용해서 parsing을 진행했지만 사실 setter로 받는 자료형이 Object라도 가능하지 않을까? 라는 생각이 들었다.

그래서 오늘은 Object 타입에 setter로 값을 받는것과 parsing 메소드를 사용해서 setter로 값을 받는 것의 속도차이를 비교해보려고 한다.

 

결과부터 미리 말하자면

① 유의미한 차이는 없다. (1ms의 차이가 발생할 수 있다.)

② 자신에게 편한 방법을 사용하면 된다.

 

 

1. 기본구조

  ① ModelVO.java를 만들어서 아래와 같이 코드를 작성해주었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class ModelVO {
    
   // field
    private Object fieldObject;
    private String fieldString;
    private double fieldDouble;

   // getter, setter
    public Object getFieldObject() {
        return fieldObject;
    }
    public void setFieldObject(Object fieldObject) {
        this.fieldObject = fieldObject;
    }
    public String getFieldString() {
        return fieldString;
    }
    public void setFieldString(String fieldString) {
        this.fieldString = fieldString;
    }
    public double getFieldDouble() {
        return fieldDouble;
    }
    public void setFieldDouble(double fieldDouble) {
        this.fieldDouble = fieldDouble;
    }
}
cs

 

  ② Practice01.java 클래스를 만들어서 main 메소드를 만들어주었다.

  ③ setter에 값이 입력되는 시간, getter로 값을 가져오는 시간을 표시하기 위해

        Calendar, SimpleDateFormat객체를 사용했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
public class Practice01 {
 
    public static void main(String[] args) {
        
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
        
        ModelVO mvo = new ModelVO();
 
    }
cs

 

 

2. Object 타입에서 걸리는 시간 확인하기

  ① double타입의 123.456이라는 값을 Object타입으로 값을 받고 다시 가져오는 코드를 작성했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
public class Practice01 {
 
    public static void main(String[] args) {
 
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
        
        ModelVO mvo = new ModelVO();
        
        double doubleType = 123.456;
        System.out.println("====================  setterObject  ====================");
        mvo.setFieldObject(doubleType);
        cal.setTime(new Date());
        System.out.println("setter 입력시간 = " + sdf.format(cal.getTime()));
        
        cal.setTime(new Date());
        System.out.println("getter 출력시간 = " + sdf.format(cal.getTime()) + "\tgetter = " + mvo.getFieldObject());
        System.out.println("====================  setterObject  ====================");
 
    }
cs

 

  ② 위의 코드를 실행시키면 콘솔창에서 아래의 화면과 같은 결과를 확인할 수 있다.

       Object타입에서는 1ms의 시간차를 확인할 수 있다. 

Console창

====================  setterObject  ====================
setter 입력시간 = 2021-06-09 10:36:18.103
getter 출력시간 = 2021-06-09 10:36:18.104 getter = 123.456
====================  setterObject  ====================

 

 

3. parsing으로 걸리는 시간 확인하기

  ① double타입의 123.456이라는 값을 String타입으로 parsing하여 값을 받고 다시 가져오는 코드를 작성했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
public class Practice01 {
 
    public static void main(String[] args) {
 
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
        
        ModelVO mvo = new ModelVO();
        
        double doubleType = 123.456;
        System.out.println("====================  parseString  ====================");
        mvo.setFieldString(Double.toString(doubleType));
        cal.setTime(new Date());
        System.out.println("setter 입력시간 = " + sdf.format(cal.getTime()));
        
        cal.setTime(new Date());
        System.out.println("getter 출력시간 = " + sdf.format(cal.getTime()) + "\tgetter = " + mvo.getFieldString());
        System.out.println("====================  parseString  ====================");
 
    }
cs

 

  ② 위의 코드를 실행시키면 콘솔창에서 아래의 화면과 같은 결과를 확인할 수 있다.

       parsing은 1ms미만의 시간차를 확인할 수 있다. 

Console창

====================  parseString  ====================
setter 입력시간 = 2021-06-09 11:08:54.825
getter 출력시간 = 2021-06-09 11:08:54.825 getter = 123.456
====================  parseString  ====================

 

 

4. 결론

  ① 값을 Object로 받아서 처리하는 것과 parsing해서 처리하는 과정에서 유의미한 차이를 발견할 수 없다.

  ② DB의 데이터를 변형하지 않고, 그저 받은 값을 표시하는 상황에서는 자신에게 편한 방법을 사용하면 된다.

728x90
반응형

BELATED ARTICLES

more