Study/Java

Java. StringBuilder, Math 클래스

염몽이 2023. 4. 1. 19:54

StringBuilder 란?

 

기존 우리가 알고 있는 StringBuffer와 비슷한 StringBuilder가 존재한다.

둘의 차이점은 아래와 같다.

StringBuilder - 동기화가 되지 않는다. - 싱글 쓰레드
StringBuffer - 동기화가 된다. - 멀티 쓰레드

 

동기화: 멀티 쓰레드에 안전 (thread-safe)하게 해주는 것

싱글 쓰레드 : 한번에 1개 작업

멀티 쓰레드: 한번에 n개 작업

 

지금까지 배운 내용들은 싱글 쓰레드이다.

추후 자바의 정석 13장에서 멀티 쓰레드를 배울 예정이다.

 

 

 

  • 멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능 저하가 된다.
  • 싱글 쓰레드 프로그램에서는 StringBuffer 대신 StringBuilder를 사용하는 것이 성능에 향상이 된다.
  • 싱글 쓰레드에서 멀티 쓰레드로 바꾼다고 가정하면, StringBuilder를 StringBuffer로 클래스 명만 바꿔주면 된다.

 


 Math 클래스란?

수학 관련 static 메소드의 집합 (인스턴스 변수가 없으니, 객체를 만들 필요 없다.)

 

- round()로 원하는 소수점 아래 세 번째 자리에서 반올림 하기

90.7552 숫자를 round() 를 사용하여 세번째 자리에서 반올림을 해보자.

 

1. 원래 값에 100을 곱한다.

2. 위의 결과에 Math.round()를 사용한다. (소수점 아래 첫자리에서 반올림)

3. 위의 결과를 다시 100.0 으로 나눈다.

 


 

아래의 사진은 Math클래스의 메소드들이다.

 

 

 


Math 클래스의 rint() 메소드와 round() 메소드의 차이점

 

public class Main{
    public static void main(String[] args) {
        double sum = 0;
        double sum1 = 0;
        double sum2 = 0;

        for(double d = 1.5; d <= 10.5; d++) {
            double d1 = Math.round(d);
            double d2 = Math.rint(d);

            System.out.printf("%4.1f %4.1f %4.1f\n", d, d1, d2);

            sum+= d;
            sum1+= d1;
            sum2+= d2;
        }

        System.out.println("----------------");
        System.out.printf("%4.1f %4.1f %4.1f\n", sum, sum1, sum2);
    }
}​

위의 코드의 결과는 아래와 같다.

 1.5  2.0  2.0
 2.5  3.0  2.0
 3.5  4.0  4.0
 4.5  5.0  4.0
 5.5  6.0  6.0
 6.5  7.0  6.0
 7.5  8.0  8.0
 8.5  9.0  8.0
 9.5 10.0 10.0
10.5 11.0 10.0
----------------
60.0 65.0 60.0​

round()는 1.5 , 2.5 , 3.5 일때는 반올림하여 2, 3, 4가 된다.

반면, rint()는

1.5 : 올림하여 2

2.5 : 내림하여 2

3.5 : 올림하여 4

4.5 : 내림하여 4

 

한번은 올림을하고, 한번은 내림을 한다. 

2.5, 4.5 는 앞 숫자가 짝수이므로 소수점 내림을 하는 것이다.

결과는 위와 같이 2, 2, 4, 4 로 짝수만 나온다. 

rint 는 round even 의 줄임말로, even은 짝수라는 의미이다.

 

즉, round()는 우리가 아는 일반 반올림이고,

rint()는 round() 보다 오차를 줄이기 위해서 나온 것이다.

 

rint()에 대해 깊게 생각은 안해도된다.

 

rint() 같이 홀수일땐 올림하고 짝수일땐 내림하면서 오차를 줄일 수 있는 방법도 존재한다는 것만 기억하자.

 

댓글수0