
IoC(제어의 역전, Inversion of Control) 기존 프로그램들은 구현 객체가 스스로 객체를 생성하고 연결하며 실행했다. 구현 객체가 프로그램의 제어 흐름을 조종했다. public class AppConfig { public MemberRepository memberRepository() { return new MemoryMemberRepository(); } public DiscountPolicy discountPolicy() { return new FixDiscountPolicy(); } public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } public OrderService or..
멀티모듈 프로젝트 테스트 멀티모듈 프로젝트로 프로젝트를 진행하면서 느꼈던 불편함 중 하나는, Domain 모듈에 ApplicationContext가 존재하지 않아서 @SpringBootApplication이 존재하는 Application 모듈에서만 테스트를 진행해야하는 것이었다. 테스트 코드를 짜면서 프로젝트를 진행해야하지만, 개발 일정에 밀려서 등한시 하기도 했고 무엇보다 모듈 내에서 테스트 코드를 짜는 방법을 알지 못해서 테스트 코드를 짜지 못했다. 하지만 이번에 리펙토링 작업을 하면서 정상적으로 동작하는지 테스트 해야할 필요가 있었고, 방법을 찾아내게 되었다. 멀티모듈 JPA 테스트 가장 큰 리펙토링 중 하나는 메인 Entity에 상속 관계가 설정되는 부분이었다. 자주 사용했던 부분이라 빌드 오류가..
SOLID SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open/Closed Principle): 개방/폐쇄 원칙 LSP(Liskov Substitution Principle): 리스코프 치환 원칙 ISP(Interface Segregation Principle): 인터페이스 분리 원칙 DIP(Dependency Inversion Principle): 의존관계 역전 원칙 1. SRP(Single Responsibility Principle) 하나의 클래스는 하나의 책임만 가져야 한다. 책임의 범위를 정할 때, 가장 중요한 지표가 되는 것은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 2. OCP(Open/Closed Pr..
Spring의 핵심 Java의 가장 큰 특징은 객체 지향 언어이다. Spring은 자바 언어 기반의 프레임 워크이다. Spring은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임 워크이다. 즉, Spring은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크다.\ Polymorphism(다형성) 역할과 구현을 분리하는 것이 중요하다. 역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며 변경도 편리해진다. 클라이언트는 대상의 역할(인터페이스)만 알면 된다. 클라이언트는 구현대상의 내부 구조를 몰라도되며, 내부 구조가 변경되어도 영향을 받지 않으며 나아가 구현 대상 자체를 변경해도 영향을 받지 않는다. Java의 다형성을 이용하여 역할과 구현을 분리 역할 = 인터페이스 구현 = 인..

⭐ 컴파일타임(Compiletime)과 런타임(Runtime)의 차이 컴파일타임(Compiletime)과 런타임(Runtime)은 소프트웨어 프로그램개발의 서로 다른 두 계층의 차이를 설명하기 위한 용어이다. 프로그램을 생성하기 위해 개발자는 첫째로 소스코드를 작성하고 컴파일이라는 과정을 통해 기계어코드로 변환 되어 실행 가능한 프로그램이 되며, 이러한 편집 과정을 컴파일타임(Compiletime) 이라고 부른다. 컴파일과정을 마친 프로그램은 사용자에 의해 실행되어 지며, 이러한 응용프로그램이 동작되어지는 때를 런타임(Runtime)이라고 부른다. ⭐ 컴파일 타임 에러(Compile Time Error) 소스코드가 컴파일 되는 과정 중에 발생하는 Syntax Error. 파일 참조 오류 등과 같은 문제들..
1. @AllArgsConstructor / @NoArgsConstructor / @RequireArgsConstructor (생성자 자동완성 어노테이션) @AllArgsConstructor 모든 변수를 사용하는 생성자를 자동완성 시켜주는 어노테이션 @AllArgsConstructor public class Order { private String food; private int price; private String makers; /*@AllArgsConstructor를 사용하면 아래와 같은 생성자를 자동 생성할 수 있다. public Order(String food, int price, String makers) { this.food = food; this.price = price; this.make..

1. UserDto -> User로 변환하는 과정 진행 중, User에 모든 값이 null로 할당되는 오류 발생 build > generated 에 생성된 UserMapperImpl 로직 내에서 toEntity 메서드가 @Override public User toEntity(UserDto arg0) { if ( arg0 == null ) { return null; } User user = new User(); return user; } 와 같이 설정되어 있었다. 실마리 찾기 1. MapperImpl에서 Entity to Dto는 잘 생성되지만 Dto to Entity가 생성되지 않는다. 2. Dto의 Annotation @Getter @AllArgsConstructor을 선언하였을 때는 Entity to..
Enum Converter의 도입 필요성 회사의 데이터베이스에서 id와 name만 가지고 있는 DrinkType, CategoryType, PaymentType과 같은 테이블이 약 20개 이상이 존재한다. PHP -> Spring 으로 변환하는 프로젝트에서 우리는 이러한 테이블을 Enum을 사용해서 값을 관리하기로 결정했다. 또한 많은 테이블이 Status라는 컬럼을 가지고 있는데, 이는 0과 1 뿐만 아니라 -1, 2, 3 처럼 여러가지 상태 값을 가지고 있다. 컬럼을 설명하는 엑셀 파일이 존재하지만, 이는 값이 궁금하면 엑셀파일에서 검색해야하는 번거로움을 가지고 있다. 하지만 기존에 존재하는 Status와 같은 값을 모두 String 값으로 변환해 저장하는 것은 추가 작업이라고 생각하여, DB에는 계..