본문 바로가기
반응형

전체 글84

Spring / 의존성 주입(생성자 주입이 권장되는 이유) 생성자 주입을 선택해야 하는 이유 최근에 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장한다. 불변성 대부분의 의존 관계 주입은 한번 일어나면 종료시점까지 의존관계를 변경할 일이 없음. 또한, 오히려 의존 관계는 애플리케이션 종료 전까지 불변해야 한다. (변경이 적어야함.) 수정자 주입은 setter를 public으로 열어 두어야 하기 때문에 외부에서 변경 가능성이 있음. 생성자 주입은 객체 생성 시 단 1번만 호출 되므로 불변하게 설계할 수 있음. 누락의 방지 생성자는 호출 시 필수적으로 값을 초기화해주어야 하므로, 누락을 방지할 수 있다. 또한 필드에 final을 붙여서 생성자에서만 초기화가 가능해지고 필드의 값이 final이므로, 불변성이 된다. 이 뿐만 아니라, 필드에 final이 붙.. 2023. 10. 17.
Spring / @Autowired의 옵션처리 @Autowired의 옵션처리 @Autowired는 required default가 true이므로, 자동 주입 대상이 없으면 오류가 발생 자동 주입할 대상이 없으면 null이 됨. 처리 방법 @Autowired(required = false) required 는 필수 주입 여부를 결정하는 옵션. false로 하는 경우, 제외 대상이 될 수 있음 @Nullable 이것을 파라미터에 넣어주면 null로 처리를 해줌. Optional Optional.empty로 넣어줌 public class AutowiredTest { @Test @DisplayName("Autowired의 옵션 처리") void AutowiredOption() { ApplicationContext ac = new AnnotationConfi.. 2023. 10. 17.
Spring / 의존관계 자동 주입 의존관계 자동 주입 스프링의 두 가지 라이프 사이클 빈 생성 단계 의존 관계 주입 단계 의존 관계의 여러가지 주입 방법 생성자 주입 수정자 주입(setter) 필드 주입 일반 메서드 주입 생성자 주입 ( 가장 많이 사용되는 주입 방식 ) @Autowired, 생성자에 이 에너테이션을 붙여서 생성자의 정보를 토대로 의존 관계를 주입 생성자 호출시점에 딱 1번만 호출되는 것이 보장됨. 즉, 코드만 잘 짜면 1번만 호출하여 의존 관계를 주입하고 더 이상 세팅 못하게 막는 것이 가능하다. 따라서, 불변, 필수 의존관계에 사용된다. 수정이 적은 불변성 코드를 작성하는 것이 개발에서 좋은 습관이다. 불변, 필수 의존 관계란?? final이 붙은 필드는 값이 무조건 초기화되어야 하며, 값이 할당 되면 "불변"이다. .. 2023. 10. 17.
정규화 Normalization (제 1~3 정규화) 정규화 Normalization (제 1~3 정규화) 정규화란? 데이터베이스 설계 프로세스에서 데이터를 구조화하고 조직화하는 과정을 나태는 것 데이터의 중복을 최소화하고 데이터의 일관성을 유지하며 DB의 효율성을 향상 시키는 것이 목적 제 1,2,3 정규형, BC 정규형, 4,5 정규형이 있음. 제 1 정규화 (FIRST NORMAL FORM) 1NF) 원자적 데이터를 가진 테이블, PK 컬럼이 있어야 한다 . -- PRIMARY KEY(주키, 기본키, PK) CREATE TABLE my_table27( id INT PRIMARY KEY, name VARCHAR(20) ); -- 또는 !! CREATE TABLE my_table28( id INT, name VARCHAR(10), PRIMARY KEY (.. 2023. 10. 13.
서브 쿼리 - MariaDB/SQL 서브 쿼리란? 하나의 SQL문 안에 포함되어 있는 또다른 SQL문을 말함. 서브쿼리는 메인쿼리가 서브쿼리를 포함하는 종속적인 관계 메인 쿼리를 외부 쿼리라고도 부르며, 서브 쿼리를 내부쿼리라고도 부름 서브쿼리 예시 SELECT SupplierID, SupplierName FROM suppliers WHERE SupplierID = (SELECT SupplierID FROM products WHERE ProductName = 'tofu'); 위 예제는 product테이블의 ProductName 이 'tofu'라는 SupplierID를 서브쿼리에서 반환하고. 메인 쿼리의 where절에 대입하는 예제. SELECT OrderDate FROM orders WHERE CustomerID IN (SELECT Cus.. 2023. 10. 13.
상관쿼리와 비상관쿼리 - MariaDB/SQL 비상관쿼리 메인쿼리와 서브쿼리 간에 데이터 종속성이 없는 쿼리를 나타낸다. 비상관쿼리는 독립적으로 실행되며, 메인쿼리에 영향을 미치지 않음. 주로 'IN', 'NOT IN', 'EXISTS', 'NOT EXISTS'등 연산자와 사용 SELECT COUNT(*) FROM customers WHERE Country = (SELECT Country FROM suppliers WHERE SupplierID =1); SELECT COUNT(*) FROM customers WHERE Country = (SELECT Country FROM suppliers WHERE SupplierID =2); 위와 같이 서브쿼리가 메인쿼리와는 상관없이 독립적으로 수행될 수 .. 2023. 10. 13.
반응형