목록Spring (78)
빙응의 공부 블로그
📝스프링 컨테이너 생성 //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스이다. 스프링 컨테이너는 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 우리는 AppConfig를 사용했던 방식이 애노테이션 기반 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. @Configuration public class AppConfig { @Bean public MemberService memberService(){ return ..
📝인터페이스 호출 방식의 문제점 public class OrderServiceImpl implements OrderService { // private DiscountPolicy discountPolicy = new FixDiscountPolicy(); private DiscountPolicy discountPolicy = new RateDiscountPolicy(); } 위 코드처럼 우리는 인터페이스를 호출한다. 빈 인터페이스에 구현체를 넣어주는 것이다. 하지만 이 방법을 사용 시 구현체가 자주 바뀌는 상황에서 ServiceImpl 본문을 수정해야 한다. 우리는 인터페이스 방법을 사용하면서 SOLID를 지켰다. 역할과 구현을 충실하게 분리했다. 다형성도 활용하고, 인터페이스와 구현 객체를 분리했다. 그..
SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리하였다. 📝단일 책임 원칙 - SRP(Single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다는 원칙이다. 사실 판단의 기준이 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 예) UI 변경, 객체의 생성과 사용을 분리 📝개방 - 폐쇄 원칙 - OCP(Open/closed principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 하는 원칙이다. 다형성에 대한 이야기이다. 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능 구현 역할..
1. 의존성 주입에 대해 DI 두 객체 간의 관계를 결정해주는 디자인 패턴이다. DI는 인터페이스를 사이에 둬서 클래스 레벨에서의 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있다. 의존성 주입의 필요성 public class Stage { private Dicapprio dicapprio; } 무대에서 디카프리오가 연기하고 있다고 생각해보자, 이 코드는 Stage가 Dicapprio의 기능에 의존하고 있다. 이렇게 두 객체 간의 관계를 맺어주는 것을 의존성 주입이라고 한다. 올바른 의존성 주입 public class Stage { private Dicapprio dicapprio = new Dicapprio(); } 위 예시에는 아주 강하게 ..
웹 개발을 하다 보면 서버에 들어온 요청이 서버에서 요구하는 스펙에 잘 맞게 들어왔는지 검사가 필요하다. //이름이 비어있으면 exception을 던진다. if (member.getName() == null) { throw Exception; } // 나이가 0보다 작으면 exception을 던진다. if (member.getAge() < 0) { throw Exception; } 이러한 검사 방법도 가능하지만 대규모 프로그램일 경우 모든 경우에 검사를 하다보면 필드가 너무 늘어난다. "그럼 따로 유효성 검사를 해주는 방법이 있으면 좋겠다" Hibernate Bean Validator Hibernate Bean Validator은 유효성 검사를 해야 하는 필드에 @NotEmpty, @NotNull, @M..
1.배경 Spring으로 간단한 팀프로젝트를 하고 있었는데 조원이 "DTO라고 중계를 사용하는게 좋다" 라는 말이 나왔다. DTO란? (Data Transfer Object) 계층간 데이터 교환을 위해 사용한다. 아래 코드는 간단한 엔티티 코드와 DTO이다. @Entity @Data public class Member { @Id private String id; private String password; private String tell; private String name; @Builder public void Member(String id, String password, String tell, String name){ this.id = id; this.password = password; th..