기본 콘텐츠로 건너뛰기

jQuery 플러그인 패턴 템플릿 완전 정리: $.fn.pluginName 예제와 사용법

jQuery 플러그인 패턴 템플릿 | pluginName 기본 구조와 사용법

jQuery 플러그인 패턴 템플릿: pluginName 기본 구조 완벽 정리

jQuery를 사용하다 보면 공통 기능을 플러그인으로 만들어서 재사용하고 싶을 때가 많습니다. 이때 매번 구조를 처음부터 짜기보다는, 플러그인 패턴 템플릿을 하나 만들어 두면 매우 편리합니다.

이 글에서는 아래와 같은 pluginName jQuery 플러그인 템플릿 코드를 기반으로, 각 부분이 어떤 역할을 하는지, 어떻게 수정해서 나만의 플러그인을 만들 수 있는지 SEO 친화적인 설명과 함께 정리합니다.

jQuery 플러그인 기본 템플릿 코드

(function($) {

    // 플러그명 (생성자 역할)
    $.pluginName = function(element, options) {

        // 기본 옵션
        var defaults = {

            foo: 'bar',

            onFoo: function() {}

        };

        var plugin = this;

        // 플러그인 설정 객체
        plugin.settings = {};

        var $element = $(element),
            element = element;

        // 초기화
        plugin.init = function() {

            // 사용자 옵션과 기본 옵션 병합
            plugin.settings = $.extend({}, defaults, options);

        };

        // public 메서드 (외부에서 호출 가능)
        plugin.foo_public_method = function() {

            // 코드 입력

        };

        // private 메서드 (내부에서만 사용)
        var foo_private_method = function() {

            // 코드 입력

        };

        // 플러그인 초기화 호출
        plugin.init();

    };

    // jQuery.fn 확장: 실제로 $(selector).pluginName(...) 형태로 사용
    $.fn.pluginName = function(options) {

        // 선택된 모든 요소에 대해 플러그인 적용
        return this.each(function() {

            // 아직 플러그인이 붙지 않았다면 초기화
            if (undefined == $(this).data('pluginName')) {

                // 새로운 플러그인 인스턴스 생성
                var plugin = new $.pluginName(this, options);

                // jQuery 데이터 공간에 인스턴스 저장
                // 나중에 $(element).data('pluginName') 형태로 접근 가능
                $(this).data('pluginName', plugin);

            }

        });

    };

})(jQuery);

코드 구조 한눈에 보기

이 템플릿은 jQuery 플러그인을 만들 때 많이 사용하는 즉시 실행 함수(IIFE) 패턴생성자 + jQuery.fn 확장 방식을 그대로 담고 있습니다. 각 부분을 이해해 두면, 이후 슬라이더, 모달, 탭 UI 같은 복잡한 UI도 일관된 방식으로 플러그인화할 수 있습니다.

1. IIFE 패턴으로 전역 변수 충돌 방지

(function($) {
    // 플러그인 코드
})(jQuery);

(function($){ ... })(jQuery); 구조는 jQuery를 $로 전달하면서도 전역 공간을 오염시키지 않는 즉시 실행 함수 패턴입니다. 다른 라이브러리와 함께 사용할 때도 안전하게 $ 별칭을 사용할 수 있습니다.

2. $.pluginName: 플러그인 생성자 역할

$.pluginName = function(element, options) { ... };

이 부분은 플러그인 인스턴스 하나를 표현하는 생성자라고 보면 됩니다. 각 DOM 요소마다 하나의 인스턴스가 생성되고, 그 인스턴스가 내부 상태와 메서드를 관리합니다.

  • element : 플러그인이 적용될 실제 DOM 요소
  • options : 사용자가 전달한 옵션 객체
  • plugin.settings : 기본 옵션 + 사용자 옵션이 합쳐진 최종 설정값

3. defaults와 $.extend()로 옵션 병합

var defaults = {
    foo: 'bar',
    onFoo: function() {}
};

plugin.settings = $.extend({}, defaults, options);

defaults 객체에는 플러그인에서 사용할 기본 옵션값을 정의합니다. $.extend({}, defaults, options)를 통해 사용자 정의 옵션이 우선 적용된 최종 설정 객체를 만들 수 있습니다.

예를 들어, 플러그인을 사용할 때 다음과 같이 옵션을 넘기면:

$('.item').pluginName({
    foo: 'custom',
    onFoo: function() {
        console.log('foo 이벤트 발생!');
    }
});

foo 값과 onFoo 콜백이 기본값을 덮어쓰게 됩니다.

4. public 메서드 vs private 메서드

// public 메서드
plugin.foo_public_method = function() {
    // 코드 입력
};

// private 메서드
var foo_private_method = function() {
    // 코드 입력
};

public 메서드는 플러그인 인스턴스 밖에서도 호출할 수 있는 함수입니다. 예를 들어 나중에 다음처럼 접근할 수 있습니다.

var instance = $('.item').data('pluginName');
instance.foo_public_method();

반면 private 메서드는 생성자 내부에서만 사용되는 유틸리티 함수처럼 동작합니다. 외부에서 직접 호출할 필요가 없는 로직은 private로 감추는 것이 깔끔합니다.

5. $.fn.pluginName: jQuery 체이닝 지원

$.fn.pluginName = function(options) {

    return this.each(function() {

        if (undefined == $(this).data('pluginName')) {

            var plugin = new $.pluginName(this, options);

            $(this).data('pluginName', plugin);

        }

    });

};

이 부분이 실제로 $('.selector').pluginName({...}) 형태로 플러그인을 쓸 수 있게 해 주는 핵심입니다.

  • this.each() : 선택된 모든 요소에 플러그인을 반복 적용
  • $(this).data('pluginName') : 요소별로 플러그인 인스턴스를 저장/재사용
  • 이미 인스턴스가 있으면 다시 생성하지 않아 중복 초기화를 방지

이렇게 만들어 두면, jQuery 특유의 체이닝(chaining)도 자연스럽게 지원됩니다.

실제 사용 예제

위 템플릿에서 pluginName만 바꾸고, 필요한 옵션과 메서드를 추가하면 바로 실전 프로젝트에서 사용할 수 있습니다.

$(function() {

    // 예: 커스텀 jQuery 플러그인 호출
    $('.my-element').pluginName({
        foo: 'custom value',
        onFoo: function() {
            console.log('onFoo 콜백 실행');
        }
    });

});

이후 특정 시점에서 플러그인 인스턴스를 직접 사용하고 싶다면 다음처럼 접근할 수 있습니다.

var plugin = $('.my-element').data('pluginName');
plugin.foo_public_method();

정리: jQuery 플러그인 패턴을 템플릿으로 만들어 두자

jQuery 플러그인을 매번 처음부터 설계하는 대신, 위와 같은 pluginName 템플릿을 프로젝트 공통 코드로 두고 이름과 옵션, 메서드만 바꿔서 사용하는 방식이 가장 효율적입니다.

  • 전역 변수 오염 없이 안전한 IIFE 구조
  • 기본 옵션 + 사용자 옵션 병합 패턴
  • public / private 메서드 분리
  • $.fn 확장과 data() 저장 패턴

이 패턴만 익혀 두면, jQuery 플러그인 만들기가 훨씬 쉬워지고 유지보수도 편해집니다. 필요에 따라 네임스페이스를 나누거나, ES6 모듈과 함께 섞어서 사용하는 등의 확장도 가능하니, 먼저 이 기본 구조를 프로젝트에 맞게 커스터마이징해 보세요.

댓글

이 블로그의 인기 게시물

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 (Request Parameter 전체보기)

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 Java Servlet Request Parameter 완전 정복 웹 애플리케이션에서 클라이언트로부터 전달되는 Request Parameter 를 확인하는 것은 필수입니다. 이 글에서는 Java Servlet 과 JSP 에서 GET/POST 요청 파라미터를 전체 출력하고 디버깅하는 방법을 다양한 예제와 함께 소개합니다. 1. 기본 예제: getParameterNames() 사용 Enumeration<String> params = request.getParameterNames(); System.out.println("----------------------------"); while (params.hasMoreElements()){ String name = params.nextElement(); System.out.println(name + " : " + request.getParameter(name)); } System.out.println("----------------------------"); 위 코드는 요청에 포함된 모든 파라미터 이름과 값을 출력하는 기본 방법입니다. 2. HTML Form과 연동 예제 <form action="CheckParamsServlet" method="post"> 이름: <input type="text" name="username"><br> 이메일: <input type="email" name="email"><b...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...

CSS로 레이어 팝업 화면 가운데 정렬하는 방법 (top·left·transform 완전 정리)

레이어 팝업 센터 정렬, 이 코드만 알면 끝 (CSS 예제 포함) 이벤트 배너나 공지사항을 띄울 때 레이어 팝업(center 정렬) 을 깔끔하게 잡는 게 생각보다 어렵습니다. 화면 크기가 변해도 가운데에 고정되고, 모바일에서도 자연스럽게 보이게 하려면 position , top , left , transform 을 정확하게 이해해야 합니다. 이 글에서는 아래 내용을 예제로 정리합니다. 레이어 팝업(center 정렬)의 기본 개념 자주 사용하는 position: absolute / fixed 정렬 방식 질문에서 주신 스타일 top: 3.25%; left: 50%; transform: translateX(-50%) 의 의미 실무에서 바로 쓰는 반응형 레이어 팝업 HTML/CSS 예제 1. 레이어 팝업(center 정렬)이란? 레이어 팝업(레이어 팝업창) 은 새 창을 띄우는 것이 아니라, 현재 페이지 위에 div 레이어를 띄워서 공지사항, 광고, 이벤트 등을 보여주는 방식을 말합니다. 검색엔진(SEO) 입장에서도 같은 페이지 안에 HTML이 존재 하기 때문에 팝업 안의 텍스트도 정상적으로 인덱싱될 수 있습니다. 즉, “레이어 팝업 센터 정렬”, “레이어 팝업 만드는 방법”과 같이 관련 키워드를 적절히 넣어주면 검색 노출에 도움이 됩니다. 2. 질문에서 주신 레이어 팝업 스타일 분석 질문에서 주신 스타일은 다음과 같습니다. <div class="layer-popup" style="width:1210px; z-index:9001; position:absolute; top:3.25%; left:50%; transform:translateX(-50%);"> 레이어 팝업 내용 <...