스프링 부트와 AWS로 혼자 구현하는 웹서비스 를 책 보고 하던 중 막혔던 것.
CRUD의 흐름을 알기 위해 공부를 하던중 이해가 안됐던 것이 있다..
그림1
1. Entity 클래스를 db로 접근하게 해주는 PostsRepository
단순히 JpaRepository를 상속하는 것을 통해 CRUD 관련 메소드를 쓸 수 있다.
그림2
막혔던 점: 인터페이스는 메소드를 정의만 하고 인터페이스를 구현하는 클래스를 따로 만들어야 하지 않나?
그런데 어떻게 save, deleteAll 등 다른 메소드를 바로 쓸 수 있을까??
내가 기존에 알던 인터페이스는
이런식으로 인터페이스 단에서는 메소드 명만 정해두고
그 후 메소드의 내용은 인터페이스를 구현하는 클래스에서 정의해 주는 것인데
나는 PostsRepository 인터페이스를 구현해주지 않았는데 어떻게 그림2처럼 메소드를 사용 가능할까? 였다
이는 스프링에서 자동으로 구현체를 만들어줘서 내가 구현한것 처럼 사용 할 수 있었던 것이다.
2. Long 타입에 관련해서
책 코드중 이런 부분이 있다.
여기서 왜 자료형이 Long 타입일까? 구글링 해보니까 void인 것도 있던데 이 차이가 뭘까 ?
이것에 대해서 며칠동안 이해가 안됐다.
인터넷에서 질문을 한 결과 답을 얻을수 있었다.
일단 기본적으로 postsRepository.save() 의 반환형은 entity다
postsRepository.save(requestDto.toEntity) 를 하면 entitiy가 나오고
그 entity.getId() 를 하면 컬럼에서 id를 Long형으로 지정 해 뒀기 때문에 그랬던 것이다.
추가로 나는 자바를 알고리즘을 풀면서 공부를 했었는데 알고리즘 공부를 할 땐 객체지향적인 지식이 자주 쓰이지 않는다.
그래서 제네릭 같은 것도 그냥 대충 알고 넘어갔었는데 스프링을 하면서 제네릭에 대해서도 공부를 했다
제네릭에 <S,T> 이런게 뭔 뜻인지도 몰랐는데
이건 생활코딩의 제네릭 강의를 통해서 알게 되었다.
'공부중 막혔던것' 카테고리의 다른 글
댓글 삭제 구현중 (0) | 2020.06.16 |
---|---|
소스코드가 업로드 되지 않을 때 (0) | 2020.06.12 |
"readyState:":4, "responseText":"",status200 에러 (0) | 2020.06.11 |
h2-console connection이 되지 않을 때 (0) | 2020.06.09 |
ajax 글 등록 버튼이 작동하지 않을 때 (0) | 2020.06.09 |