자바의 정석 9장 (25일차) - StringBuilder & Math

728x90

StringBuilder

StringBuffer 클래스와 기능이 완전히 동일하지만 한가지 차이점이 있다.

StringBuffer는 동기화가 되어있지만 StringBuilder는 동기화가 되어있지 않다

말인 즉슨, StringBuffer는 멀티쓰레드의 사용 시 안전하다는 의미이다 (thread-safe).

 

쓰레드는 single thread와 multi thread가 있는데 single thread는 한가지 작업만 할 수 있고 multi는 여러개의 작업을 허용한다.

예시로 카카오톡으로 파일을 보낼 경우에는 single thread는 채팅을 할 수 없지만 multi는 이 작업을 동시에 가능하게 만든다.

multi thread의 단점은 서로 메모리를 공유하기 때문에 서로의 작업을 간섭할 수 있는데 StringBuffer는 이 메모리 간섭에 안전하게 보호되어 있다. 이 안전한 메모리 보호를 '동기화되어있다' 라고 한다.

 

결론: 따라서 멀티쓰레드를 사용할 때 StringBuffer를 쓰고 싱글쓰레드를 사용 시 StringBuilder를 사용한다 

목적: 성능 향상, 나중에 멀티쓰레드로 프로그램을 변경할 시 자료형만 변경해주면 해결

 


Math 클래스 & 메서드

대표적인 static 클래스이기 때문에 따로 자료형을 선언하지 않아도 메서드 호출이 가능하다.

 

메서드의 종류

  • Math.abs : 절대값 반환
  • Math.random : 랜덤 실수형 숫자 반환
  • Math.ceil : 반올림 시 주어진 값을 올림하여 반환, 즉 반올림 값이 0.5 미만이여도 큰 숫자로 올림하여 반환
  • Math.floor : 주어진 값을 버림하여 반환, 즉 0.5 이상의 값이 있어도 버림하여 작은 숫자로 반환한다.
  • Math.max : 둘 중에 큰 값을 반환
  • Math.min : 둘 중에 작은 값을 반환
  • Math.rint :

반올림을 할 때 앞의 int값(정수값)이 짝수이면 버림하여 작은 숫자로 반환하고 홀수이면 올림하여 큰 숫자로 반환한다.

roundeven과 메서드의 기능이 같다

 

출력문:

0.5 반올림 전과 후 0.0
1.5 반올림 전과 후 2.0
2.5 반올림 전과 후 2.0
3.5 반올림 전과 후 4.0
4.5 반올림 전과 후 4.0

		for(double d = 0.5; d<=4.5; d++) {
			double r = Math.rint(d);
			System.out.println(d + " 반올림 전과 후 " + r);
		}
728x90