Spring

Spring

[Spring] Spring에서의 Service와 ServiceImpl

프로젝트 개발시 암묵적인 룰로 Service 인터페이스를 두고 ServiceImpl라는 구현체인 클래스를 생성해서 개발하곤 했었다. 그러다보니 왜 나누는건지에 대한 의문이 생겨 찾아보았고, 좋은 자료를 참고하여 그 내용을 정리해보려 한다. Service와 ServiceImpl 패턴으로 설계하는 이유 하나의 인터페이스를 구현하는 여러 구현체가 있고 기능에 따라 적절한 구현체가 들어가서 다형성을 주기 위함이다. 또한 인터페이스와 구현체를 분리함으로써 객체 간의 결합도를 낮추어 변화에 유연한 개발을 할 수 있기 때문. (Loose Coupling) 구현체 클래스를 확장하거나 수정하더라도 이를 사용하는 클라이언트의 코드에 영향을 주지 않는다. 그러나, 실제로 구현한 코드를 살펴보면 인터페이스와 구현체 클래스가 ..

Spring

[Spring/Java] Entity 클래스의 id값을 Long 타입으로 지정해야 하는 이유

@Entity @Getter public class Hello { @Id @GeneratedValue private Long id; @NotNull private String name; } int, long이 아닌 Wrapper Class인 Long을 쓰는 이유는 null값을 사용할 수 있기 때문이다. primitive type은 default값이 0으로 지정되어 있어 null이 될 수 없다. 예를 들어 id가 없는 경우 나타낼 수 없게 된다. null값을 정확하게 처리하기 위해서는 Wrapper Class를 사용하는 것이 더 좋은 방법이다. Wrapper Class의 Long과 Integer 중에서 Long을 쓰는 이유는 표현범위 때문이다. Long이 Integer보다 월등히 많은 수를 표현할 수 있기..

Spring

@annotation 정리

@Getter @Setter // 이렇게 lombok을 설정해주면 컴파일할 때 DeLombok이라는 절차를 통해서 getter/setter를 자동으로 생성해준다. @ToString @NoArgsConstructor // 인자 없이 생성하는 생성자 , 거의 필수적으로 생성 @AllArgsConstructor // 객체가 가지고 있는 모든 필드들을 인자로 받아서 생성하는 생성자 @RequiredArgsConstructor // 꼭 필요한 인자만을 이용해서 생성하는 생성자 @EqualsAndHashCode // 자바에서 기본적으로 객체의 동등성을 비교하기 위해서 equals()와 hashCode()를 오버라이딩할 것을 권고하고 있다. @Data // @Getter, @Setter, @ToString, @Equ..

Spring

JPA Repository method 정리

JpaRepository method 정리 List findAll(); 조건없이 해당 entity, 즉 테이블의 전체 값을 가져오는 메소드. 전체 read를 List로 받아서 Heap 메모리 영역에 저장한다고 하면 OutOfMemory가 되어서 일반적으로 성능 이슈 때문에 사용하진 않는다. List findAll (Sort sort); findAll()에 정렬값 추가 List findAllById(Iterable ids); Id 값이 Iterable. 즉, List 타입으로 들어감. List saveAll(Iterable entities); entity를 Iterable List 형식으로 받아서 전부다 한꺼번에 DB에 반영하도록 저장하는 메소드. void flush(); 현재 Jpa context에서 가..

seco
'Spring' 태그의 글 목록