-
Notifications
You must be signed in to change notification settings - Fork 300
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[JDBC 라이브러리 구현하기 - 1단계] 로건(정다빈) 미션 제출합니다. #266
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 로건 리뷰어 하디입니다 !
1단계 잘 구현해주신 것 같아요 멋집니다 !
로건의 코드를 보면서 ResultSet
의 메서드에 대해서도 많이 알게되었어요 ㅋㅋㅋ
리팩토링은 다음 단계이기도 하고, 로건의 구현 방식을 묻는 커멘트를 하나 남겨뒀어요.
이 질문은 해당 pr에 남기셔도 되고 다음 단계 하실 때 대답해주셔도 될 것 같아요 고생하셨습니다 !
2단계 파이팅 !
public <T> T queryForObject(final String query, final Class<T> convertClass, final Object... args) { | ||
Connection conn = null; | ||
PreparedStatement pstmt = null; | ||
ResultSet rs = null; | ||
try { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
를 참고해보시면 jdbctemplate
의 메서드에 대해서 볼 수 있는데요 !
queryForObject
를 비롯해서 여러 메서드들이 두 번째 인자로 Class<T>
또는 RowMapper<T>
를 받고 있습니다 !
로건은 현재 Class<T>
를 구현해주셨는데요 !
jdbctemplate은 RowMapper<T>
와 Class<T>
를 받는 메서드를 왜 모두 구현해 놨을까요 ?
로건의 생각을 듣고싶습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2단계 진행하면서 대략적인 장단점을 확인할 수 있었어요
1. Class<T>
확실히 RowMapper<T>
를 사용한다면 메서드와 RowMapper<T>
를 왔다갔다하는 경우가 있었는데, User.class
로 사용하니까 해당 메서드에만 집중할 수 있어서 컨텍스트 스위칭이 없다는 점이 매우 편했어요
거기다가 개발자는 User
라는 클래스만 잘 변환하는걸 원하지, 어떻게 변환을 해야할지 UserDao
에 적을 필요 없다는 점이 RowMapper<T>
보다는 캡슐화가 잘 적용되어 있다는 느낌이 들었어요.
단점은 JdbcTemplate
을 구현하는 미션이라 해당 코드가 RowMapper<T>
보단 확실히 지저분하다는 점이네요. 그래서 2단계라 리팩터링이라 코드가 클린해보는게 좋아보여서 RowMapper<T>
로 변경했어요 ㅎㅎ
2. RowMapper<T>
장점은 RowMapper<T>
를 UserDao
에서 설정할 수 있으므로 좀 더 커스텀이 가능해서 유연하다는게 장점이 될 수 있을 것 같아요.
단점은 Class<T>
의 장점이 단점인 것 같아요!
둘 다 제공하는 이유는 저도 궁금해서 Spring JDBC PR을 살펴봤는데, 애초에 깃허브에 기록한 첫 커밋부터 두가지 방법을 모두 만들어놨더라구요.
첫 커밋에 코드양이 엄청 많은걸보면 다른 곳에서 작업하던걸 깃허브에서 옮긴 것 같은데, 이전 기록을 어디서 찾아야할지 모르겠어요.
그래서 제가 추측하기로는 서로의 장단점의 반대가 다른 방법의 장단점으로 작용해서 선택적으로 사용하라고 한게 아닐까 생각이 듭니다..???
* refactor: stage0 코드 정리 * refactor: stage1 코드 정리 * refactor: stage3 코드 정리 * feat: UserDao의 update, findAll, findByAccount 기능 추가 * refactor: 반환값이 없는 DAO 메서드를 JdbcTemplate로 이동 * feat: update 메서드로 인해 영향 받은 행 수를 반환하도록 추가 * refactor: User 생성자 파라미터 long → Long으로 변경 * refactor: 한 개의 반환값만 얻는 쿼리문을 JdbcTemplate의 queryForObject로 변경 * refactor: 여러개의 반환값을 얻는 쿼리문을 JdbcTemplate의 queryForList로 변경 * refactor: findByAcoount에 JdbcTemplate 적용 * refactor: UserDao 생성자에 DataSource 삭제 * style: 코드 포맷 수정
* refactor: stage0 코드 정리 * refactor: stage1 코드 정리 * refactor: stage3 코드 정리 * feat: UserDao의 update, findAll, findByAccount 기능 추가 * refactor: 반환값이 없는 DAO 메서드를 JdbcTemplate로 이동 * feat: update 메서드로 인해 영향 받은 행 수를 반환하도록 추가 * refactor: User 생성자 파라미터 long → Long으로 변경 * refactor: 한 개의 반환값만 얻는 쿼리문을 JdbcTemplate의 queryForObject로 변경 * refactor: 여러개의 반환값을 얻는 쿼리문을 JdbcTemplate의 queryForList로 변경 * refactor: findByAcoount에 JdbcTemplate 적용 * refactor: UserDao 생성자에 DataSource 삭제 * style: 코드 포맷 수정
안녕하세요 하디!
이번 미션 2단계가 리팩터링이라
JdbcTemplate
에 있는 중복 코드도 같이 제거하지 않았어요1단계 요구사항은 개발자가 프로덕션 코드에서 결과 추출만 집중할 수 있도록 요구하는 것 같아서 그대로 두었습니다.
이거는 한 번에 2단계에서 같이 진행할 예정입니다
그리고 모든 모듈에 코드 리포맷을 돌려서 변경된 파일이 굉장히 많은 상태라 여기 부분만 보시면 편할 것 같아요
아니면
style: 코드 포맷 수정
이전까지 커밋 순서대로 보셔도 됩니다저는 이번 미션 보고 레벨 1 체스 미션이 생각났는데요
저때는
JdbcTemplate + RowMapper
로 비슷하게 만들어보아서 이번엔User.class
와 같은 클래스를 보내면 동적으로 해당 클래스를 반환하게 만들어보았습니다.감사합니다!