[스프링] 스프링 EL 커스텀 함수 및 연산자 추가

스프링 프레임워크의 표현 언어(EL)은 JSP와 연동하여 동적인 콘텐츠를 생성하거나 속성에 접근할 수 있는 강력한 기능을 제공합니다. 그러나 기본 제공 함수 및 연산자 외에도 사용자 정의 함수나 연산자를 추가하여 EL을 확장할 수 있습니다. 이번 글에서는 스프링 EL에 커스텀 함수 및 연산자를 추가하는 방법에 대해 알아보겠습니다.

커스텀 함수 추가

함수 정의

먼저, 사용할 커스텀 함수를 정의합니다. 아래는 간단한 예제입니다.

package com.example.el;

public class CustomFunctions {
    public static String reverseString(String input) {
        return new StringBuilder(input).reverse().toString();
    }
}

위의 코드에서 reverseString은 입력된 문자열을 뒤집은 결과를 반환하는 함수입니다.

스프링 설정

다음으로, 스프링 설정 파일(XML 또는 Java Config)에 커스텀 함수를 등록해야 합니다.

XML 설정 파일

<bean id="customFunctions" class="com.example.el.CustomFunctions" />
<bean id="customFunctionsResolver" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="customFunctions" />
</bean>

Java Config

@Configuration
public class CustomELConfig {

    @Bean
    public CustomFunctions customFunctions() {
        return new CustomFunctions();
    }
}

커스텀 연산자 추가

연산자 정의

연산자를 추가하려면 javax.el.FunctionMapperjavax.el.ELResolver를 확장하여 연산자를 정의해야 합니다. 아래는 간단한 예제입니다.

package com.example.el;

import javax.el.ELContext;
import javax.el.ELException;
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;

public class CustomOperator {

    public static Object multiply(Object first, Object second, ELContext context) {
        ExpressionFactory factory = context.getELResolver().getExpressionFactory();
        ValueExpression expression = factory.createValueExpression(context, "${first * second}", Object.class);
        return expression.getValue(context);
    }
}

위의 코드에서 multiply 연산자는 두 개의 입력 값을 곱한 결과를 반환합니다.

스프링 설정

커스텀 연산자를 사용하려면, el.resolver 프로퍼티를 사용하여 커스텀 ELResolver를 등록해야 합니다.

<bean id="customELResolver" class="com.example.el.CustomELResolver"/>
<bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles-defs.xml</value>
        </list>
    </property>
    <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory" />
    <property name="elResolver" ref="customELResolver" />
</bean>

마무리

이제 사용자 정의 함수와 연산자가 스프링 EL에 추가되었습니다. 새로운 기능을 활용하여 보다 유연하고 강력한 EL 표현식을 구성할 수 있게 되었습니다. 커스텀 함수 및 연산자 추가 기능은 스프링 EL을 좀 더 확장하고 다양한 형태의 표현식을 사용할 수 있게 해줍니다.

이상으로 스프링 EL 커스텀 함수 및 연산자 추가에 대해 알아보았습니다.

더 많은 정보는 스프링 공식 문서를 참고하시기 바랍니다.