float, double, BigDecimal
- Java에선 2.0 - 1.1을 계산하면 0.89999999가 나오는데, 1.1을 float나 double이나 명확하게 표현할 수 없다
- 정확한 연산을 위해선 BigDecimal로 아래와 같이 사용할 수 있다
public static void main(String args[]) {
System.out.println(2.00 - 1.10); // 0.89999999
System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10"))); //0.90
}
String, StringBuffer, StringBuilder
- 셋 다 문자열을 표현하는 타입으로써 String은 불변, 나머지는 가변 상태이다
- 불변이라 함은 한번 생성하면 할당된 메모리 공간이 변하지 않는 것이며, 문자열 조합을 할 땐 가변 상태를 이용하는 것이 좋다, 기존 공간이 부족하면 버퍼를 늘려 유연하게 동작하기 때문
- Buffer와 Builder 차이는 동기화 유무, StringBuffer 내 메소드들은 synchronized 키워드가 존재한다
Overriding, Overloading
- Overriding은 상위 클래스 메소드를 하위 클래스에서 재정의하는 것
- Overloading은 상위 클래스 메소드의 이름, return 값은 동일하게, 파라미터만 다른 메소드를 만드는 것
Record
- 데이터 객체를 쉽게 생성하기 위한 클래스 타입
- 기존 데이터 클래스는 아래와 같이 생성했는데, 불필요한 코드들이 많았다
public class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
- Record는 이런 불필요한 코드없이 한줄만으로 선언하여 활용할 수 있게 만들어진 타입이다
public record Person(String name, int age) {}