본문 바로가기

전체 글26

@Configuration 1. 특징 스프링 3.X 이상의 프레임워크에서는 XML 파일에서 하는 Bean의 정의를 자바클래스로서 선언할수 있게 한다. Spring IoC 컨테이너에게 설정 정보(Meta Data)임을 알려줌 XML 파일에서 아래와 같이 설정하는 것과 동일한 역할을 수행( 클래스를 스프링 Bean으로 등록하고 이미 등록된 bean들에 대해 어노테이션을 활성화하는 것) 개발자가 직접 제어할 수 없는 외부 라이브러리 혹은 설정을 위한 클래스를 Bean으로 등록할 때 @Bean 어노테이션과 함께 사용되기도 함. (단독으로도 사용 가능) @Bean 단독 사용 시, bean 등록이 되긴 하지만 IoC 컨테이너에서 싱글톤 객체로 생성되지 않음 @Target(ElementType.TYPE) @Retention(RetentionP.. 2021. 1. 10.
DI(Dependency Injection) 애플리케이션 코드를 작성할 때, 애플리케이션에 특정한 기능이 필요하다면 외부 라이브러리를 호출하여 사용하곤합니다. 개발자가 프로그램의 흐름의 주도권을 가지고 제어하는 구조입니다. 하지만, 스프링과 같은 프레임워크에서의 개발은 프레임워크에서 필요할 때 애플리케이션 코드를 호출하는 형태로 동작하므로 프레임워크가 흐름의 주체가 됩니다. 이렇게 제어권이 개발자에게서 프레임워크로 흐름이 바뀌었다고 하여 IoC(Inversion of Control : 제어의 역전)이라고 부릅니다. 이 때, 프레임워크에서 제어권을 가지는 것이 컨테이너(Container)입니다. 컨테이너는 객체의 생성과 생명주기 관리(Life Cycle) 관리등을 도맡아서 하게됩니다. 출처 : nextree.co.kr/p11247/ 세 가지 DI 컨.. 2021. 1. 3.
Springboot 단위 테스트 Why? 테스트 코드를 왜 작성해야 하는지 검색하면 많은 사람들이 테스트코드의 중요성을 강조하면서 유지보수의 편리함, 코드의 문서화, 시간의 단축, 디버깅의 편리함과 같은 이유를 말한다. 나 같은 경우에는 이 글들을 읽으면서 중요하다고 생각은 하지만 뭔가 가슴에 와닿지는 않는다는 느낌을 지울수가 없었다. 그래서 실제로 프로젝트를 진행할때도 형식적으로 작성하거나 그냥 넘어가는 경우도 많이 있었다. 그러다 springboot 관련 책을 공부하다 테스트 코드에 관한 글을 읽게 되었는데, 여기서 나온 테스트 코드를 작성하는 이유를 자신의 경험을 토대로 설명해주었는데, 나에게는 크게 다가와서 좀 더 테스트코드에 대해 상세하게 공부를 하고 습관을 들여야겠다는 생각이 들었다. 책에서 소개한 작가의 경험은 다음과 같다.. 2020. 12. 31.
ORM, 그리고 JPA ( Java Persistent API ) ORM의 등장배경 ORM이 등장하기 이전의 웹개발은 서버에서 데이터베이스의 레코드들을 CRUD 하기 위해서 SQL Mapper를 활용한 SQL 중심의 환경이었다. 이런 환경에서 서버가 하는 일의 대부분은 sql의 수행결과를 필드에 매핑시키는 일이었고, Mapper 파일엔 CRUD를 위한 수많은 sql문으로 가득차 있었다. 그러다보니 자연스럽게 프로그램은 sql에 의존하게 되고, 자바의 장점인 객체지향적인 개발을 할 수 없게 되었다. 뿐만 아니라, 유지보수를 할 때도 복잡한 조건을 가진 긴 쿼리문을 가지고 씨름하는 일이 많았고 컬럼 하나만 변경해도 아주 많은 코드와 sql문이 수정되어야 했다. 또한, RDBMS는 데이터를 효율적으로 저장하고 관리하기 위한 목적을 가진 반면, 자바와 같은 객체지향 프로그래밍.. 2020. 12. 27.
static import static import 사용하는 이유 일반적으로 다른 클래스의 static 멤버에 접근하기 위해서는 이 멤버가 어디에서 왔는지 레퍼런스를 명시해야한다. 다음 예시를 보자. double a = Math.cos(Math.PI * theta) 위의 코드에서 cos과 pi는 Math 클래스로부터 왔음을 나타내고 있다. 여기서 문제는 Math가 반복적으로 등장한다는 점이다. 수식이 짧을 때는 큰 상관이 없겠지만, 수식이 길어지고 Math가 자주 등장한다면 가독성과 생산성이 많이 떨어질 수 밖에 없다. 이 반복적으로 등장하는 Math를 줄이려면 다음과 같은 방법들이 있다. 인터페이스를 생성해 정적 멤버(여기선 cos과PI)를 인터페이스에 기술하고 이 인터페이스를 상속받는다. → 이것은 좋은 방법이 아니다. 이 방.. 2020. 12. 26.
Annotation Annotation 이란? Annotation은 자바 Java5에서 새롭게 추가된 문법이다. 사전에서 찾아보면 "주석"이라는 의미를 가지고 있으며, 뜻 그대로 자바 코드에 주석처럼 달아 특별한 의미를 부여한다. 이 의미는 컴파일 타임 혹은 런타임에 해석된다. 자바 혹은 Spring이 제공해주는 것들도 있고, 개발자가 직접 만들 수도 있다. 메타 데이터(실제 데이터가 아닌 데이터를 위한 데이터) 라고도 불리는데, 이는 프로그램 코드의 일부가 아닌 프로그램에게 추가적인 정보를 제공해주는 역할을 수행하기 때문이다. 클래스, 메소드, 변수등 모든 요소에 선언이 가능하다. Annotation 등장배경? 프로그램의 규모가 날이 갈수록 방대해지고, 복잡해지면서 XML이 가지는 설정정보의 양이 많아짐에 따라 가독성이 .. 2020. 12. 26.
함수의 파라미터로 함수를 전달할 때 표현법에 따른 차이 이번 포스팅에서는 제가 React 공부를 하다가 함수의 파라미터로 함수를 전달할때, 함수의 표현방법에 따른 결과의 차이에 대해서 궁금함이 생겨서 의문점 + 나름대로 제가 이해한 것 을 정리하려고 글을 씁니다. import React, { useState, useRef, useCallback } from 'react'; import TodoTemplate from './components/TodoTemplate'; import TodoInsert from './components/TodoInsert'; import TodoList from './components/TodoList'; function createBulkTodos() { const array = []; for (let i = 1; i { co.. 2019. 11. 13.
Function 과 ES6 Arrow Function 차이 화살표 함수(Arrow Function)은 ES6 문법에서 함수를 표현하는 새로운 방식입니다. 기존의 function 키워드 대신 화살표(=>)를 사용하여 간략하게 표현할 수 있습니다. setTimeout(function() { console.log('hello world'); },1000); setTimeout(() => { console.log('hello world'); },1000); 위 2개의 코드는 동일한 작업을 수행합니다. 콘솔창에 'hello world'를 출력합니다. 이런 경우에는 두 문법간의 차이점이 없어 보입니다. 그러면 화살표함수가 기존의 함수선언 문법을 완전히 대체할 수 있는걸까요? 결론부터 말씀드리면 답은 'No'입니다. 화살표 함수가 기존의 Fucntion 키워드를 활용하는 함.. 2019. 11. 12.