본문 바로가기

TIL

Java의 record 클래스 타입으로 상세기록 만들기

일단 recode는 자바 14부터 preview기능으로 나왔고 16버전부터 정식으로 들어왔기때문에, 사용하지 못하는 분들도 계실 수 있습니다.

 

일단 저는 이게 뭔지 궁금해서 한번 사용해보았고 생각보다 쉽고 괜찮은 기능이라 생각해서 적용하고 작성해봅니다.

recode가 뭔데?

불변(immutable) 데이터 객체를 위한 전용 클래스 문법.

예를들어서 이런 클래스가 있다고 가정해봅시다.

public class User {
    private final String name;
    private final int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }

    @Override
    public boolean equals(Object o) { ... }
    @Override
    public int hashCode() { ... }
    @Override
    public String toString() { ... }
}

해당 클래스의 목적은 name과 age라는 데이터를 묶어서 전달하는것.

위의 코드를 recode를 활용하면

public record User(String name, int age) {}

이렇게 가벼워진다. 

그럼 그 아래의 

 

  • private final String name;
  • private final int age;
  • 생성자
  • name(), age() getter
  • equals()
  • hashCode()
  • toString()

를 모두 자동으로 만들어준다.

사용하는법은 똑같이

User user = new User<>("홍길동",20);

 

이렇게 작성해주면 된다. 

 

그럼 내 코드에 적용해보자.

우선

package Challenge;

public record CalcRecord <T extends Number> (T num1, T num2, OperatorType operator, double result) {
}

이런 recode클래스를 만들어줬다. 이후 사용자가 계산기를 이용하면 값을 저장 할 수 있도록

    private final ArrayList<CalcRecord<T>> calcRecords = new ArrayList<>();

이런 변수를 하나 선언 해줬는데 조금 복잡해보이지만 뜯어보면 간단하다.

우선 변수는 ArrayList 타입이다, 

그안에 요소들이 CalcRecode 타입이고 제네릭을 사용해준다. 그뿐이다. 생각보다 간단하다.

 

다만,

CalcRecord<T> calcRecord = new CalcRecord<>(positiveNumber1,positiveNumber2 , operator , result);
        calcRecords.add(calcRecord);

데이터에 추가해줄때 메서드안에서 이런 객체를 하나 만들고 거기서 생성한 데이터를 calcRecords 에 add해준다

이름에 s가 붙고 안붙고 차이가있는데 이름을 잘못 선언한거같다..

 

여튼 이렇게 저장을 해주고 불러오는부분은 forEach 를 사용해줬다.

원래 stream().forEach를 했는데 그냥 forEach를 써도된다고 인텔리제이가 알려줘서 사용해줬다.

public void getCalcRecords() {
        this.calcRecords.forEach(record -> {
            System.out.println("============================================================");
            System.out.println("첫번 째 수 : " + record.num1());
            System.out.println("연산자 : " + record.operator());
            System.out.println("두번 째 수 : " + record.num2());
            System.out.println("연산 결과 : " + record.result());
            System.out.println("============================================================");
        });
    }

 

1 : 계산기 | 2 : 가장 오래된 기록 삭제 | 3 : 더 큰 숫자 찾기 | 4 : 삭제 취소 | 5 : 연산 기록 조회 | exit 입력시 종료
5
============================================================
첫번 째 수 : 100.0
연산자 : PLUS
두번 째 수 : 200.0
연산 결과 : 300.0
============================================================
원하시는 메뉴를 선택 해 주세요.
1 : 계산기 | 2 : 가장 오래된 기록 삭제 | 3 : 더 큰 숫자 찾기 | 4 : 삭제 취소 | 5 : 연산 기록 조회 | exit 입력시 종료

이렇게 저장된 결과를 잘 불러오는 것을 확인 할 수있다.

참고자료

 

[Java] Java14 레코드(Record)를 알아보자

Java 8 , 11 버전만 사용하다 보니 이후 버전에 추가된 것들에 대해서 학습을 하려고 합니다. Java 14에서 추가된 레코드(Record)에 대해서 레코드의 목적, 자동생성 항목 등 레코드의 기본 사항에 대해

colevelup.tistory.com

 

'TIL' 카테고리의 다른 글

예외 처리를 하는 이유  (0) 2026.01.20
의존성 주입 해보기 (DI)  (0) 2026.01.15
삭제한데이터를 undo 하는 기능 만들기  (0) 2026.01.14
이중콜론(::)(매서드 참조)표현식  (0) 2026.01.14
enum이란 무엇인가?  (0) 2026.01.13