반응형

@Configuration

 

한 개 이상의 @Bean을 제공하는 클래스에 명시하는 어노테이션으로, IOC Container에게 해당 클래스가 Bean으로 구성된 클래스라는 것을 알려줍니다.

 

@Bean

 

개발자가 직접 제어할 수 없는 외부 라이브러리들을 Bean으로 만들 때 사용합니다.

 

@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


@Autowired

 

필드, 생성자, 수정자 메소드에 사용하는 어노테이션으로, 무조건적인 객체에 대한 의존성을 주입시킵니다.

 

@Component

 

Java Bean에 등록하지 않아도 자동 주입이 가능하도록 해주는 어노테이션입니다. 개발자가 직접 개발한 클래스를 Bean에 등록할 경우 @Component 어노테이션을 사용하면 됩니다.

 

@Controller에 @Component가 명시되어 있습니다.

 

@Autowired

 

스프링에서 빈 인스턴스가 생성된 후, @Autowired로 설정된 메소드, 필드가 자동으로 호출됩니다.

 

@Controller

 

해당 클래스가 Controller임을 명시합니다. @Component 어노테이션을 사용해도 상관 없지만 @Cotroller 어노테이션에 @Component 어노테이션의 기능이 포함되어 있고 @Controller를 사용함으로써 해당 클래스가 Controller 역할을 하는 것을 명확하게 알 수 있습니다.

 

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

@Service

 

해당 클래스가 비즈니스 로직을 담은 Service 클래스임을 명시합니다. @Component 어노테이션을 사용해도 상관 없지만 @Sevice 어노테이션에 @Component 어노테이션의 기능이 포함되어 있고 @Service를 사용함으로써 해당 클래스가 Service의 역할을 하는 것을 명확하게 알 수 있습니다.

 

@Repository

 

해당 클래스가 Repository임을 명시합니다. @Component 어노테이션을 사용해도 상관 없지만 @Repository 어노테이션에 @Component 어노테이션의 기능이 포함되어 있고 @Repository를 사용함으로써 해당 클래스가 Repositorydml 역할을 하는 것을 명확하게 알 수 있습니다.

반응형
반응형

JSTL(JSP Standard Tag Library)

 

JSTL은 이름 그대로 '자바 서버 페이지 표준 태그 라이브러리' 라는 뜻을 갖고 있습니다. JSP는 HTML 문서에서 Java 코드를 이용하여 동적인 페이지를 만드는 역할을 하는데 JSP에서 Java를 다루기 위해서는 스크립틀릿(scriptlet)을 사용합니다. 하지만, JSP에 포함된 HTML 태그와 스크립틀릿이 섞이면 유지 보수가 어렵기 때문에 실무에서는 HTML 태그 형식으로 사용할 수 있는 JSTL이 사용됩니다.

 

JSTL은 코드의 재사용률이 높고, 빠른 개발이 가능하며 스크립틀릿을 사용하지 않아도 된다는 장점이 있습니다.

 

JSTL 태그 종류

 

JSTL의 태그 종류는 아래의 표와 같으며, 사용할 때 JSP 지시자를 통하여 선언합니다.

 

JSTL 선언 예시) <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 

태그 기술
core tags 변수 지원, URL 관리, 흐름 제어 등을 제공, URL은 http://java.sun.com/jsp/jstl/core , 접두사는 c
function tags 문자열 조작 및 문자열 길이를 지원, URL은 http://java.sun.com/jsp/jstl/functions , 접두사는 fn
formatting tags 메시지 형식화, 번호 및 날짜 형식화 등을 지원, URL은 http://java.sun.com/jsp/jstl/fmt , 접두사는 fmt
XML tags 흐름 제어, 변환 등을 제공, URL은 http://java.sun.com/jsp/jstl/xml , 접두사는 x
SQL tags SQL 지원을 제공, URL은 http://java.sun.com/jsp/jstl/sql , 접두사는 sql

 

core tags

 

태그 기술
c:out <% = ... %> 태그 작동 방식과 유사한 표현식의 결과를 표시
c:import 상대 또는 절대 URL을 검색하여 내용을 'var'의 문자열, 'varReader'의 Reader 또는 페이지에 표시
c:set 평가중인 표현식의 결과를 'scope'변수에 설정
c:remove 특정 범위에서 지정된 범위 변수를 제거하는 데 사용
c:catch 본문에서 발생하는 Throwable 예외를 포착하는 데 사용
c:if 조건을 테스트하는 데 사용되는 조건부 태그이며 표현식이 참인 경우에만 본문 내용을 표시
c:choose, c:when, c:otherwise 평가 된 조건이 true 인 경우 본문 내용을 포함하는 간단한 조건부 태그
c:forEach 기본 반복 태그, 고정 된 횟수 또는 초과 수집 동안 중첩 된 본문 내용을 반복
c:forTokens 제공된 델리 미터로 분리 된 토큰을 반복
c:param 포함하는 'import'태그의 URL에 매개 변수를 추가
c:redirect 브라우저를 새 URL로 리디렉션하고 컨텍스트 기준 URL을 지원
c url

 

function tags

 

메소드 기능
fn:contains() 프로그램에서 지정된 하위 문자열을 포함하는 입력 문자열인지 테스트하는 데 사용
fn:containsIgnoreCase() 입력 문자열에 대소 문자를 구분하지 않고 지정된 하위 문자열이 포함되어 있는지 테스트하는 데 사용
fn:endsWith() 입력 문자열이 지정된 접미어로 끝나는 지 테스트하는 데 사용
fn:escapeXml() XML 마크업으로 해석되는 문자를 escape
fn:indexOf() 지정된 하위 문자열이 처음 나타나는 문자열 내에서 인덱스를 반환
fn:trim() 문자열의 양쪽 끝에서 공백을 제거
fn:startsWith() 주어진 문자열이 특정 문자열 값으로 시작되는지 여부를 확인하는 데 사용.
fn:split() 문자열을 하위 문자열 배열로 분할
fn:toLowerCase() 문자열의 모든 문자를 소문자로 변환
fn:toUpperCase() 문자열의 모든 문자를 대문자로 변환
fn:substring() 주어진 시작 및 끝 위치에 따라 문자열의 하위 집합을 반환
fn:substringAfter() 특정 하위 문자열 다음에 문자열의 하위 집합을 반환
fn:substringBefore() 특정 하위 문자열 앞의 문자열 하위 집합을 반환
fn:length() 문자열 내부의 문자 수 또는 컬렉션의 항목 수를 반환
fn:replace() 모든 문자열을 다른 문자열 시퀀스로 바꿈

 

반응형
반응형

생성자 주입(Constructor Injection)

 

스프링에서 가장 권장하는 방식입니다. 단일 생성자인 경우에는 @Autowired 어노테이션을 붙이지 않아도 되지만 생성자가 2개 이상인 경우에는 생성자에 어노테이션을 붙여야 합니다.

 

@Controller
public class MemberController {

    private final MemberService memberService;
    
    public MemberController(MemberService memberService) {
        
        this.memberService = memberService;

    }
}

 

필드 주입(Field Injection)

 

의존성을 주입할 필드에 @Autowired 어노테이션을 붙이면 자동으로 의존성이 주입됩니다.

 

@Controller
public class MemberController {

    @Autowired
    private final MemberService memberService;
    
}

 

수정자 주입(Setter Injection)

 

Setter 네이밍 패턴을 따르는 메소드를 이용한 주입입니다. 반드시 Setter 메소드일 필요는 없으나 동일한 기능을 수행해야 하며, 일관성 있는 코드 설계를 위해 Setter 네이밍 패턴을 사용하는 것이 권장됩니다.

 

public class MemberController {

    private MemberService memberService;
    
    @Autowired
    public void setMemberService(MemberService memberService) {
    
        this.memberService = memberService;
        
    }

}

 

생성자 주입이 가장 권장되는 이유

 

인텔리제이에서 필드 주입 혹은 생성자 주입을 하면 @Autowired 어노테이션에 노란줄과 함께 경고 메시지가 나옵니다. 어노테이션만으로도 간단하게 주입할 수 있는데 생성자 주입이 가장 권장되는 이유는 개발을 할 때 여러 컴포넌트 간에 의존성이 생기고 순환 참조가 발생하는 경우 서로를 참조하게 되어 오류가 발생할 수 있는데 필드 주입과 생성자 주입은 이런 순환 참조의 문제가 발생하였을 때 어플리케이션 동작 초기에 알 수가 없습니다. 하지만 생성자 주입을 사용하는 경우, 순환 참조가 있을 시 어플리케이션이 구동조차 되지 않기 때문에 발생할 오류를 사전에 알 수 있습니다.

반응형
반응형

코드 관련 단축키

 

기능 단축키
한 줄 지우기 Ctrl + Y
한 줄 복사 Ctrl + D
코드 자동 정렬 Ctrl + Alt + L

 

생성 관련 단축키

 

기능 단축키
Test 생성 클래스 이름 위에서 Alt + Enter 후 Create Test
Test Method 생성 Test 클래스 이름 위에서 Alt + Insert
메소드 생성 Ctrl + Alt + M
반응형

+ Recent posts