Kotlin

@Bean 어노테이션 사용해 Bean 등록하기이전 글에서 유저 정보를 조작하는 UserRepository 인터페이스를 구현하는 객체가 InMemoryUserRepository와 DbUserRepository 두개가 있고, 이 중 하나를 UserCreator 클래스에서 사용한다고 했을 때 코드를 다음과 같이 구성했었다.interface UserRepository { fun createUser(id: String, user: String)}class InMemoryUserRepository(): UserRepository { override fun createUser(id: String, user: String) { println("User $user created with id: $..
Bean의 의존성 주입 우선 순위 관리가 필요한 이유다음과 같은 모양의 UserRepository와 두 개의 구현체 InMemoryUserRepository, DbUserRepository 가 있다고 해보자.interface UserRepository { fun createUser(id: String, user: String)}class InMemoryUserRepository(): UserRepository { override fun createUser(id: String, user: String) { println("User $user created with id: $id in InMemoryUserRepository") }}class DbUserRepository(): ..
Spring이 제공하는 IOC Container을 만드는 방법Spring에서는 IOC Container을 만들기 위해 다양한 방법을 제공한다. Annotation을 기반으로 동작하는 IOC Container을 만들 수도 있고, xml을 기반으로 동작하는 IOC Container을 만들 수도 있다. 하지만 xml을 기반으로 동작하는 IOC Container은 이제는 거의 사용되지 않기 때문에 이번 글에서는 Annotation을 기반으로 동작하는 IOC Container을 만드는 방법을 살펴본다. Annotation을 기반으로 동작하는 IOC Container 만들기Annotation을 기반으로 동작하는 IOC Container는 AnnotationConfigApplicationContext 라는 클래스를 ..
느슨한 결합의 장점느슨한 결합을 사용하게 됐을 때의 장점은 크게 다음 두가지가 있다.1. 변경 혹은 리펙토링이 편해진다.2. 컴파일 타임의 최소화 지금부터 각각이 무엇을 뜻하는지 알아보자. 1. 변경 혹은 리펙토링이 편해진다.클래스만을 사용해 구현을 하게 되면, 해당 클래스의 역할이 처음에 생각했던 범위를 넘어서는 일이 자주 생긴다.예를 들어 검색을 하는 클래스와 검색 결과 상태를 저장하는 클래스가 분리되어 있다고 하고, 검색을 하는 클래스는 검색 결과 클래스에 의존성이 있기 때문에 이 상태값을 알 수 있는 상황을 가정해보자. 누군가 검색 결과 상태를 검색을 하는 클래스로부터 가져올 수 있으니 검색을 하는 클래스로부터 검색 결과를 가져오는 로직을 추가하게 되면 검색을 하는 클래스는 졸지에 검색 결과 상태..
자바의 Record 클래스 Java 14부터 Record라 불리는 데이터를 저장하는 클래스가 도입됐다. 이 Record는 코틀린의 Data class와 매우 유사한 기능으로, 'record' 키워드로 선언된 클래스는 equals, hashCode, toString 함수를 자동으로 생성한다. 예를 들어 다음과 같이 생성된 record 클래스 Blog가 있다고 해보자. *아래 코드는 Java이다. public record Blog(String name, int age) { } 이 Blog 클래스는 이름(name)과 생긴 후 지난 날짜(age)를 인자로 받는다. 이제 이 record 클래스가 어떻게 동작하는지 확인하기 위해 다음과 같이 코드를 만들어보자. public class Main { public st..
Dev.Cho
'Kotlin' 태그의 글 목록 (2 Page)