분류 전체보기90 [TIL 06/20] IoC, DI, ApplicationContext IoC 애플리케이션의 제어 흐름을 직접 관리하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(Inversion of Control)이라 한다. 객체가 자신이 사용할 객체를 선택하거나 생성하지 않는다. 생성한 코드에서는 OrderService가 어떤 OrderRepository를 사용할지, 어떤 ItemService를 사용할지 직접 선택하거나 객체를 생성하지 않는다. OrderService는 묵묵히 자신의 로직을 실행하는 역할만을 담당한다. 객체를 만드는 책임은 오롯이 설정 파일로써 작성한 AppConfig가 가지고 있게 된다. 이것이 제어의 역전이 발생한 상황이고 이러한 IoC를 가능하게 하는 공간을 IoC 컨테이너라고 부른다. IoC 컨테이너에서 개별 객체간의 의존 관계 설정이 이루어지고 객체의 생.. 2023. 6. 20. [디자인 패턴] 옵저버 패턴 옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one to many) 의존성을 정의합니다. 옵저버 패턴은 주제(Subject)와 옵저버(Observer) 간의 일대다 관계로 구성됩니다. 주제의 상태가 바뀌면 옵저버에게 정보가 제공됩니다. public interface Subject { void registerObserver(Observer o); void removeObserver(Observer o); void notifyObserver(); } public interface Observer { void update(); } Subject 인터페이스 옵저버를 등록하고, 삭제하고, 상태가 변화했음을 알립니다. Observer.. 2023. 6. 19. [TIL 06/19] Build 필요한 라이브러리를 다운 받고 classpath에 추가한다. 소스 코드를 컴파일한다. 테스트 코드를 실행하여 작성한 코드에 대한 검증을 수행한다. 컴파일된 코드를 패키징한다. -> .jar / .war 패키징된 파일을 서버나 리포지토리에 배포한다. Build Tool 빌드 툴은 이러한 task 들을 자동화한다. 어떠한 일들을 하겠다는 task에 대해 기술할 수 있으며 해당 파일을 빌드 스크립트라고 부른다. 스크리트 언어로 Maven은 XML, Gradle은 Groovy 또는 Kotlin을 사용한다. Maven 자바 기반의 프로젝트 빌드 툴이다. XML 기반으로 설정 모델을 제공하고 pom.xml에 의해서 정의된다. archetype이라는 프로젝트 템플릿을 제공하여 반복된 설정 작업을 줄여준다... 2023. 6. 19. 함수형 인터페이스와 람다 표현식 1. 함수형 인터페이스 함수형 인터페이스는 오직 하나의 추상 메서드만을 지정하는 인터페이스이다. 이 때, 디폴트 메서드, 스태틱 메서드의 포함 여부는 상관없다. 람다 표현식을 통해 함수형 인터페이스의 추상 메서드 구현을 전달할 수 있다. 그러므로 해당 표현식을 함수형 인터페이스의 인스턴스로 취급할 수 있다. @FunctionalInterface public interface Runnable { public abstract void run(); } @FunctionalInterface 애노테이션을 통해 함수형 인터페이스임을 컴파일러에 알려줄 수 있다. 만일 두 개 이상의 함수형 인터페이스를 선언한다면 컴파일 에러가 발생한다. 1.1 익명 클래스 자바는 클래스 선언과 인스턴스화를 동시에 수행할 수 있도록 익.. 2023. 6. 18. [디자인 패턴] 싱글턴 패턴 1. 싱글턴 패턴이란 싱글턴 패턴은 클래스 인스턴스를 하나만 만들고, 해당 인스턴스로의 전역 접근 방법을 제공합니다. 클래스에서 하나뿐인 인스턴스를 관리하도록 만듭니다. 다른 클래스에서는 해당 클래스의 인스턴스를 생성하지 못하도록 생성자는 private으로 설정합니다. 싱글턴 패턴을 적용한 클래스는 어디서든 해당 인스턴스에 접근할 수 있도록 전역 접근 방법을 제공합니다. 인스턴스가 필요할 때 해당 클래스에 요청을 하면 하나뿐인 인스턴스를 건네주도록 만듭니다. 싱글턴은 게으른 방식(lazy instantiation)으로 구현할 수 있습니다. 실제로 해당 인스턴스가 필요한 시점에 생성하도록 하여 불필요한 리소스의 낭비를 줄일 수 있습니다. 2. 싱글턴 패턴을 구현하는 방법 고전적인 방법 아래는 고전적인 싱글.. 2023. 6. 11. 단위 테스트를 위한 Mockito 사용법 목 객체 생성하기 Mockito.mock() 메서드를 사용하면 목 객체를 생성할 수 있습니다. 목 객체는 클래스, 인터페이스, 추상 클래스 어떤 것이든 대상으로 설정이 가능합니다. MemberRepository repositroy = Mockito.mock(MemberRepository.class); 목 객체를 좀 더 쉽게 만들려면 JUnit5 확장 기능을 사용하면 됩니다. 이를 사용하면 일일이 mock() 메서드를 사용할 필요 없이 필드에 @Mock 애노테이션만 붙이면 자동으로 목 객체를 생성해 줍니다. @ExtendWith(MockitoExtension.class) public class MemberServiceTest { @Mock private MemberRepository repository; .. 2023. 6. 6. 이전 1 ··· 7 8 9 10 11 12 13 ··· 15 다음