본문 바로가기
관리자

분류 전체보기

(999)
[비공개] Weekly Report - 21/06/07~21/06/13, 350일차 보호되어 있는 글입니다.
[스프링 기초] 8. 스프링 컨테이너 이 때까지는 스프링을 사용하지 않고 자바 코드로만 객체지향적 설계를 공부했다. 이제는 스프링 코드로 전환해본다. 1. 스프링 컨테이너 앞에서 공부했듯이, 구성 정보를 관리하는 객체인 AppConfig.class를 DI 컨테이너 등으로 부른다고 했다. 이 DI 컨테이너를 스프링 기술을 도입한 스프링 컨테이너로 만들어보자. @Configuration 어노테이션 클래스 위에 @Configuration 어노테이션을 붙여주었다. 이것은 해당 클래스가 설정(구성) 정보를 관리하는 클래스임을 나타낸다. org.springframework.context.annotation을 import 해야하는 것에 유의하자. @Bean 어노테이션 각 메서드 위에 붙여줌으로써 해당 메서드의 이름을 갖는 '빈' 들을 컨테이너에 등록하게..
[스프링 기초] 7. IoC, DI, 컨테이너 1. IoC(Inversion of Control) : 제어의 역전 이전 글에서 사용영역과 구성 영역을 구분함으로써 객체 지향 설계 원칙을 지킬 수 있었다. 구성 정보를 설정하는 AppConfig 클래스를 만들어서 객체를 생성하고, 할당하였다. 이전글 : 6. 사용영역과 구성영역 나누기로 SRP, OCP, DIP 원칙 실현하기 IoC는 용어의 이름에서 알 수 있듯, 구성 정보를 내가(실행 코드가 있는 객체가) 직접 설정하는 것이 아니라, 외부(라이브러리, 프레임워크 등)에서 이런 과정을 대신해주는 것을 의미한다. -> AppConfig.class 파일에서 구성 정보를 설정해주는 것도 IoC라고 할 수 있다. 2. DI(Dependency Injection) DI는 직역하면 '의존 관계 주입' 이지만, 좀..
[TIL] MSSQL 날짜값 지정, CONVERT, DATEPART(DATE_FORMAT), GROUP BY alias 1. SQL 구문 날짜값이 포함된 MSSQL 쿼리문을 작성한다. 1 2 3 4 5 6 7 SELECT A1, CONVERT(varchar(10), a.updated_at, 20) AS date, CONVERT(varchar(10), DATEPART(dw, a.updated_at)) AS dayOfWeek FROM absolute AS a JOIN .... ON .... WHERE ..... GROUP BY CONVERT(varchar(10), a.updated_at, 20), DATEPART(dw, a.updated_at) ORDER BY CONVERT(varchar(10), a.updated_at, 20); Colored by Color Scripter cs 2. CONVERT(포맷(길이), 날짜값, ..
[TIL] SQL ANY_VALUE 가끔 SQL 구문 중 ANY_VALUE 구문이 나올 때가 있다. 다음 구문에서, customer.name 을 any_value로 지정하게 되면 customer.id를 통해 group by 가 이루어지면서 orders.value는 customer.id값이 같은 값끼리 더해지게 된다. 그러나 customer.name값은 이름에서 알 수 있듯이 이름 값이라서 sum 등의 합산(aggregate) 구문으로 치환될 수 없다. 이럴 때, any_value를 써주면 여러 행의 customer.name값 중 아무거나 1개의 값으로 대표되어 표기된다. 1 2 3 4 select customer.id , any_value(customer.name) , sum(orders.value) from customer join or..
[TIL] @SuperBuilder 사용법 1.개요 @Builder처럼 어떤 객체의 필드값들을 편하게 지정하기 위해서 사용한다. 다만, super라는 말에서처럼 부모 객체를 상속받는 자식 객체를 만들 때, 부모 객체의 필드값도 지정할 수 있게 하기 위해서 사용한다. 2. 사용법 테스트를 위해서 ListDto라는 객체를 빌더 패턴을 이용해서 만들고자 한다. 이 객체에 companyId 라는 필드값을 1L로 지정할려고 한다. 그런데, 아래와 같이 companyId는 ListDto가 상속받고 있는 BaseDtoAbstract의 필드라면, 부모 객체인 BaseDtoAbstract와 자식 객체인 ListDto에 @SuperBuilder 어노테이션을 적어줘야한다. 그러면 처음 그림과 같이 자식 객체에서도 부모 객체의 필드값을 빌더 패턴으로 만들어줄 수 있게..
[비공개] Weekly Report - 21/05/31~21/06/06, 343일차 보호되어 있는 글입니다.
[스프링 기초] 6. 사용영역과 구성영역 나누기로 SRP, OCP, DIP 원칙 실현하기 1. 변경 코드 적용 : RateCaringPolicy 동물원의 정책이 바뀌어서, FixedCaringPolicy에서 RateCaringPolicy로 변경됬다. 다행히도 다형성을 지켜가면서 인터페이스로 역할을 만들어놨기 때문에, 기존 인터페이스를 상속받는 새로운 클래스를 만들기가 수월하다. RateCaringPolicy CaringPolicy 역할(interface)을 그대로 상속받기 때문에 작성해놓았던 totalExpense 메서드를 그대로 활용할 수 있다. 2. SRP, OCP, DIP 위반 그런데, 바뀐 RateCaringPolicy를 적용하기 위해서 클라이언트와 소통하는 Service 코드를 살펴보면 OCP, DIP 그리고 SRP가 위반되어 있는 것을 알 수 있다. 아래 코드를 보면서 뭐가 잘못된..