본문으로 바로가기

스프링부트 CRUD 관련

category 공부중 막혔던것 2020. 5. 27. 13:10

스프링 부트와 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> 이런게 뭔 뜻인지도 몰랐는데

이건 생활코딩의 제네릭 강의를 통해서 알게 되었다.