본문 바로가기

Java31

[Java] Comparable과 Comparator Comparable과 Comparator자바에 익숙해지기 위해 프로그래머스를 풀던중 정렬 관련에 대해 코딩할 때, Comparator와 Comparable에 대해 알게 되었고 이해와 정리가 필요하다는 생각을 하게 되어 정리하려고 합니다. Arrays.sort()을 호출하여 정렬하는데 사실 이 정렬기능은 Comparable의 구현에 의해 정렬된 것입니다. 정렬을 하려면 '기준'이 필요한데, Comparator와 Comparable은 모두 인터페이스로 객체를 비교할 수 있도록 만들게 하고, 이것을 사용하려고 하면 인터페이스니 선언된 메소드를 반드시 구현을 해야 합니다. public interface Comparator { int compare(T o1, T o2);}public interface Compar.. 2025. 4. 4.
[Java] Stream StreamJava 8부터 추가된 기술로 람다를 활용해 배열과 컬렉션을 함수형으로 간단하게 처리할 수 있는 기술입니다. 기존의 for문과 Iterator를 사용하면 코드가 길어져서 가독성과 재사용성이 떨어지며 데이터 타입마다 다른 방식으로 다뤄야 하는 불편함이 있었습니다. 하지만 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메소드를 정의해 놓아서 데이터 소스에 상관없이 모두 같은 방식으로 다룰 수 있으므로 코드의 재사용성이 높아지게 됩니다. 스트림에 대한 내용은 아래와 같이 크게 세 가지로 나눌 수 있습니다.생성하기 : 스트림 인스턴스 생성가공하기 : 필터링(filtering) 및 맵핑(mapping) 등 원하는 결과를 만들어가는 중간 작업(intermediate operation.. 2025. 4. 2.
[프로그래머스/Java] 문자열 정수의 합 -Codeclass Solution { public int solution(String num_str) { int answer = 0; for (char n : num_str.toCharArray()) { answer += n - '0'; }; return answer; }} 2025. 2. 5.
[Mockito] ArgumentMatchers 및 any,eq ArgumentMatchers ArgumentMatchers는 메소드 호출 시 특정 인자값과 일치하는지, 혹은 특정 조건을 만족하는지를 확인하는 데 사용되는 도구입니다. Mockito는 여러 가지 Argument Matchers를 제공하며, 사용자는 이를 활용하여 원하는 조건에 맞는 인자를 검증할 수 있습니다.🏷️ ArgumentMatchers.any() Mocking 된 메소드를 설정하기 위한 방법은 여러 가지가 있는데, 첫 번째는 메소드에 "고정된 값"을 사용합니다.doReturn("...").when(userAccountService).getUserInfo("...");위와 같이 doReturn()이나 do()에 사용된 문자열처럼 고정된 값을 사용할 수 있습니다. 하지만 모든 테스트가 고정된 값만.. 2024. 10. 21.
[JPA] @PrePersist와 @PreUpdate @PrePersist@Column(name = "created_at")private LocalDateTime createdAt;@PrePersistvoid createdAt() { this.createdAt = LocalDateTime.now();} 엔티티가 생성될 때마다 실행되어야 하는 로직을 구현하는 데 사용되며, 엔티티가 생성될 때마다 현재 날짜를 값으로 설정하는 로직 등을 구현할 수 있습니다. 또한, 위의 이미지같이 JPA 엔티티(entity)가 비영속 상태에서 영속 상태가 되는 시점 이전에 실행이 되게 됩니다.@PreUpdate@Column(name = "modified_at")private LocalDateTime modifiedAt;@PreUpdatevoid modifiedAt() { .. 2024. 10. 18.
[Java / TDD] 테스트 케이스 작성시 발생한 영속성 관련 오류 ✔️ 사용된 엔티티1. QuestionBoard@Getter@Setter@Table(name = "question_board")@ToString(callSuper = true)@Entitypublic class QuestionBoard extends AuditingFields { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // UsreAccount와 연결 -> JoinColumn을 통해 user_id와 연결 @JoinColumn(name = "user_id") @ManyToOne private UserAccount userAccount; // 유저 정보 @Column(null.. 2024. 8. 28.