목록프로그래밍/java (49)
쌓고 쌓다
테스트 코드 작성중에 특정 인자와 함께 메서드가 1회 실행되었는지 확인하는 과정이 있었다.그런데 이상하게 인자가 잘 넘어갔는데 메서드가 테스트가 통과하지 않는 것이다. 동일한 객체인지 비교에 문제가 있어서 그런가 클래스에 @EqualsAndHashCode를 붙였더니테스트 코드가 통과된다. 그래서 equals와 hashCode에 대해 이해해보자. Object 클래스에 기본적으로 hashCode과 equals가 있다. 이건 어디다 쓰이는 것일까? @Testvoid test() { Car carA = new Car("12가3456"); Car carB = new Car("12가3456"); System.out.println("carA == carB : " + (carA == carB)); ..
C++로 알고리즘을 풀고 공부했는데... 우아한 테크 캠프 모집을 봤는데 코딩 테스트 언어로 Java만 지원 받는다는 ... 충격적인... 그래서 백엔드를 희망하기도해서 이제 알고리즘 공부를 Java로 시작하기로 다짐했다.. 당장 코딩 테스트인데 자바로 기본적인 자료구조 사용하는 법을 정리하고자 한다.. 자료구조 사용을 위해 다음을 import하면 된다. import java.util.*; Stack Stack s = new Stack(); // 생성 s.push(1); // 삽입 s.pop(); // 삭제 s.peek(); // 조회 s.empty(); // 크기 조회 Queue Queue q = new LinkedList(); // 생성 q.add(1); // 삽입 q.remove(); // 삭제 q..
다음과 같은 JSON을 받았다. { "status": "success", "data": { "id": 11, "name": "name!", "title": "title!", "content": "content!", "regDate": "2023-11-20T14:04:14" }, "message": "성공했다." } 다음과 같은 클래스로 파싱을 시도했더니.. public class InquiryListResponse { private String status; private List data; private String message; } Expected BEGIN_ARRAY but was BEGIN_OBJECT !!!!! ARRAY를 예측했더니 OBJECT가 나왔다는 이야기다. 그렇다! 내가 data에 ..
REST API 응답을 만들며 아래의 코드를 봤다. public class ApiResponse { private T data; public T getData() { return data; } public void setData(T data) { this.data = data; } } T가 뭐야.. 자바에서 제네릭은 데이터 형식에 의존 받지 않고 여러 데이터를 가질 수 있도록 지원하는 방법이다. ArrayList와 같이 ArrayList l = new ArrayList(); 와 같이 생성하고 썼다. 이게 제네릭이였다. 그럼 궁금한게 생긴다. Object를 쓰고말지 왜 제네릭을 쓸까?? 아래의 코드를 보자. List list = new ArrayList(); list.add(“hello”); String ..
Lombok 사용시 이상하게 boolean isParent 필드의 getIsParent() 메서드가 생성이 안되는 것이다. @Entity @Data public class Comment { private boolean isParent; } boolean 타입인 경우 getter는 getXXX로 생성이 되는 것이 아니라. isXXX로 생성이 된다. boolean 타입은 getter를 관례상 isXXX로 작성하는 것이다. 아래와 같이 변경하여 사용해주자. Comment 컬럼명 변경 alter table comment CHANGE is_parent parent int; Comment 필드 변경 private boolean parent;
문제의 코드를 보자. Member findMember = memberRepository.findById(member.getId()).get(); if(findMember==null) { ... } Repository에서 ID를 통해 회원을 찾아 get으로 객체를 꺼내 없으면 if문을 통해 로직을 수행하게하려 했으나... 위의 에러가 발생했다. Optional에서 get으로 꺼낼때 안에 객체가 존재하지 않으면 Exception을 터트린다. 해결 방법 Member findMember = memberRepository.findById(member.getId()).orElse(null); orElse를 통해 값이 있다면 그 값을 반환하고 없다면 null을 반환하도록 했다.
댓글 개수 증가를 위한 메서드를 작성하는데 이게 안되는것이다... getCommentCnt()의 결과로 개수(값)가 반환되어 나올것인데 여기에 +1 값을 원해서 ++를 붙였다. 증감 연산자인 ++ 또는 -- 는 변수들에 사용이 가능하지 값에는 사용이 불가능하다. 무슨말이냐!!?? 변수에 증감 연산자 int x = 5; x++; 바람직한 코드이다. 값에 증감 연산자 5++; 값 6을 갖지 않는다. 해결 방법
업 케스팅 후 오버라이딩 메소드 실행 테스트 클래스 구조 class Person{ void print() { System.out.println("PERSON"); } } class Student extends Person{ void print() { System.out.println("STUDENT"); } } 실행 코드 Student s = new Student(); s.print(); Person p = s; p.print(); 실행 결과 -> 메소드가 오버라이딩 되어 있다면, 레퍼런스가 무엇이든지 오버라이딩된 메소드를 실행한다. 업 캐스팅 후, 같은 이름의 변수 출력 테스트 구조 class Person{ String name = "PERSON"; } class Student extends Perso..