목록Study/Spring (7)
자바칩
@MockBean은 Spring의 테스트 컨텍스트에서 목(mock) 객체를 정의하기 위해 사용됩니다. @MockBean을 사용하면 Spring의 애플리케이션 컨텍스트에 목 객체를 등록하여, 해당 목 객체를 실제 애플리케이션 빈 대신 사용하게 할 수 있습니다. 이는 주로 통합 테스트 또는 웹 계층 테스트에서 사용됩니다.@MockBean의 역할목적: Spring 애플리케이션 컨텍스트에 목 객체를 등록하여, 해당 목 객체를 테스트에서 사용하도록 합니다.사용 위치: 주로 Spring의 컨트롤러, 서비스, 리포지토리 등을 테스트할 때, 해당 객체의 의존성을 목 객체로 대체하기 위해 사용됩니다.기능: @MockBean으로 정의된 객체는 Spring 컨텍스트에서 실제 빈 대신 사용되며, 이로 인해 실제 데이터베이스나..
@RunWith(MockitoJUnitRunner.class)JUnit5부터는 @RunWith 대신 @ExtendWith 사용목적: Mockito를 사용하여 단위 테스트를 수행하기 위해 사용됩니다.기능: MockitoJUnitRunner는 Mockito 어노테이션(@Mock, @InjectMocks)을 처리하고, 테스트 클래스에서 목(mock) 객체를 생성하고 주입하는 기능을 제공합니다.사용 위치: 보통 서비스 클래스나 리포지토리 클래스와 같은 비즈니스 로직을 테스트할 때 사용합니다. @RunWith(MockitoJUnitRunner.class) public class UserServiceTest { @InjectMocks private UserService user..
@InjectMocks와 @Mock 어노테이션의 사용은 각기 다른 목적을 가지고 있습니다. 이를 통해 단위 테스트에서 객체 간의 의존성을 효과적으로 관리하고, 테스트 대상 객체와 그 의존 객체를 올바르게 설정할 수 있습니다.@Mock역할: 특정 클래스의 목(mock) 객체를 생성합니다.사용 위치: 테스트에서 사용되는 의존 객체에 대해 사용됩니다.목적: 목 객체를 통해 실제 객체의 동작을 시뮬레이션하고, 특정 메서드 호출에 대해 정의된 동작을 수행하도록 합니다. @Mock private UserRepository userRepository; @Mock private PasswordEncoder passwordEncoder; 위 예시에서는 UserRepository와 Password..
디자인 패턴역할어댑터 패턴 (Adapter Pattern)호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴 프록시 패턴 (Proxy Pattern) 제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴 데코레이터 패턴 (Decorator Pattern) 메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴 싱글톤 패턴 (Singleton Pattern) 클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴 템플릿 메서드 패턴 (Template Method Pattern) 상위 클래스의 견본(템플릿) 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴 팩토리 메서드 패턴 (Factory Method Pattern) 오버라..
단일 책임 원칙(SRP: Single Responsibility Principle)정의: 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.설명: 클래스는 하나의 기능 또는 역할만을 가져야 하며, 그 기능을 변경하는 이유는 하나뿐이어야 한다. 이를 통해 클래스의 복잡성을 줄이고, 코드의 가독성과 유지보수성을 높일 수 있다.예시: 사용자의 정보를 관리하는 User 클래스와 사용자 인터페이스를 처리하는 UserInterface 클래스를 분리하여 각각의 책임을 명확히 한다.개방-폐쇄 원칙 (OCP: Open-Closed Principle)정의: 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀 있어야 한다.설명: 새로운 기능을 추가할 때 기존 코드를 변경하지 않고 확장할 수 있어야 한다. 이를 ..
캡슐화 (Encapsulation): 정보 은닉정의: 데이터(속성)와 그 데이터(속성)를 조작하는 메서드를 하나의 객체로 묶는 것설명: 객체 내부의 데이터(속성)와 메서드를 외부에서 직접 접근하지 못하도록 하고, 객체를 통해서만 접근할 수 있도록 제한한다. 이를 통해 데이터의 무결성을 유지하고, 객체 간의 상호작용을 명확하게 정의할 수 있다.예시: 클래스 내의 private 속성은 외부에서 직접 접근할 수 없고, public 메서드를 통해서만 접근 가능하다.상속 (Inheritance): 재사용 + 확장정의: 하나의 클래스가 다른 클래스의 특성과 기능을 물려받는 것설명: 기존 클래스를 재사용하여 새로운 클래스를 만들 수 있게 한다. 상속을 통해 코드의 재사용성을 높이고, 공통적인 기능을 부모 클래스에서 ..
AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)AOP는 프로그램의 여러 부분에 걸쳐 공통적으로 사용되는 기능을 모듈화하는 프로그래밍 패러다임이다. 예를 들어, 로깅, 보안, 트랜잭션 관리 등의 기능은 다양한 클래스와 메소드에 걸쳐 필요할 수 있다. AOP는 이러한 공통 기능을 하나의 모듈로 분리하여 코드의 중복을 줄이고 유지 보수를 용이하게 한다. AOP의 목적OOP와 이름이 비슷하여 상반된 개념 같지만, 관점 지향 프로그래밍은 객체 지향 프로그래밍을 보완하기 위해 쓰인다. 기존 객체(Object) 지향은 목적에 따라 클래스를 만들고 객체를 만들었다. 따라서 핵심 비즈니스 로직이든, 부가 기능의 로직이든 하나의 객체로 분리하는데 그치고, 그래서 이 기능들을 어떻게 바라..