본문 바로가기
관리자

Programming-[Backend]

(394)
[스프링 기초] 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 어노테이션을 적어줘야한다. 그러면 처음 그림과 같이 자식 객체에서도 부모 객체의 필드값을 빌더 패턴으로 만들어줄 수 있게..
[스프링 기초] 6. 사용영역과 구성영역 나누기로 SRP, OCP, DIP 원칙 실현하기 1. 변경 코드 적용 : RateCaringPolicy 동물원의 정책이 바뀌어서, FixedCaringPolicy에서 RateCaringPolicy로 변경됬다. 다행히도 다형성을 지켜가면서 인터페이스로 역할을 만들어놨기 때문에, 기존 인터페이스를 상속받는 새로운 클래스를 만들기가 수월하다. RateCaringPolicy CaringPolicy 역할(interface)을 그대로 상속받기 때문에 작성해놓았던 totalExpense 메서드를 그대로 활용할 수 있다. 2. SRP, OCP, DIP 위반 그런데, 바뀐 RateCaringPolicy를 적용하기 위해서 클라이언트와 소통하는 Service 코드를 살펴보면 OCP, DIP 그리고 SRP가 위반되어 있는 것을 알 수 있다. 아래 코드를 보면서 뭐가 잘못된..
[스프링 기초] 5. 예제만들기2 : SRP 원칙 및 객체 주입, 의존에 대한 이해 1. 예제 확장 위 그림과 같이 예제를 확장해보자. Plan(Creature, CaringPrice, Policy) 관리 계획에서는 Plan이라는 객체가 있고, Plan은 생물(creature)의 종류, 생물 종류에 따른 Caring Price, 관리 정책 Policy에 의해 제어된다. Service, 로직을 구현하는 위치 클라이언트로부터 받은 파라미터 값을 검증(validation)하거나, 계산하는 등 input값을 바탕으로 적절한 output을 만들어 내는 곳이다. Creature, 관리 대상인 생물들 생물들은 각기 무게(weight)가 있고, 무게에 비례하게 관리 비용(expense)이 든다고 가정한다. 또한 동물이든 식물이든 멸종위기 종의 기준인 Grade가 있어서, 일반 종은 Normal, 멸종..
[링크] 자바 final 요약 참조1. 링크 요약 -final은 클래스, 메서드, 변수에 붙일 수 있다. -final로 선언하면 해당 객체가 변하더라도 원래 선언 시에 할당되었던 값으로만 객체를 참조한다. -final이 붙은 클래스는 상속 불가 -final이 붙은 메서드는 오버라이드 불가 -final이 붙은 변수는 재할당 불가 참조 1. 개발왕 도던님의 블로그 https://makemethink.tistory.com/184