<CustomDialogActivity.java>
@Override
    public Dialog onCreateDialog(int dialogId) {
     Dialog dialog = null;
     switch (dialogId) {
      case CUSTOM_DIALOG :
    CustomDialog.Builder customBuilder = new
    CustomDialog.Builder(CustomDialogActivity.this);
    customBuilder.setTitle("Custom title")
     .setMessage("Custom body")
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int which) {
       CustomDialogActivity.this
       .dismissDialog(CUSTOM_DIALOG);
      }
     })
     .setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int which) {
       dialog.dismiss();
      }
     });
             dialog = customBuilder.create();
       break;
 
<CustomDialog.java>
public class CustomDialog extends Dialog {
    public CustomDialog(Context context, int theme) {
        super(context, theme);
    }
    public CustomDialog(Context context) {
        super(context);
    }
    /**
     * Helper class for creating a custom dialog
     */
    public static class Builder {
        private Context context;
        private String title;
        private String message;
        private String positiveButtonText;
        private String negativeButtonText;
        private View contentView;
        private DialogInterface.OnClickListener 
                        positiveButtonClickListener,
                        negativeButtonClickListener;
        public Builder(Context context) {
            this.context = context;
        }
        /**
         * Set the Dialog message from String
         * @param title
         * @return
         */
        public Builder setMessage(String message) {
            this.message = message;
            return this;
        }
        /**
         * Set the Dialog message from resource
         * @param title
         * @return
         */
        public Builder setMessage(int message) {
            this.message = (String) context.getText(message);
            return this;
        }
        /**
         * Set the Dialog title from resource
         * @param title
         * @return
         */
        public Builder setTitle(int title) {
            this.title = (String) context.getText(title);
            return this;
        }
        /**
         * Set the Dialog title from String
         * @param title
         * @return
         */
        public Builder setTitle(String title) {
            this.title = title;
            return this;
        }
        
        /**
         * Set a custom content view for the Dialog.
         * If a message is set, the contentView is not
         * added to the Dialog...
         * @param v
         * @return
         */
        public Builder setContentView(View v) {
            this.contentView = v;
            return this;
        }

        /**
         * Set the positive button text and it's listener
         * @param positiveButtonText
         * @param listener
         * @return
         */
        public Builder setPositiveButton(String positiveButtonText,
                DialogInterface.OnClickListener listener) {
            this.positiveButtonText = positiveButtonText;
            this.positiveButtonClickListener = listener;
            return this;
        }
 
        /**
         * Set the negative button text and it's listener
         * @param negativeButtonText
         * @param listener
         * @return
         */
        public Builder setNegativeButton(String negativeButtonText,
                DialogInterface.OnClickListener listener) {
            this.negativeButtonText = negativeButtonText;
            this.negativeButtonClickListener = listener;
            return this;
        }
        /**
         * Create the custom dialog
         */
        public CustomDialog create() {
            ...
}

소스가 많아서 죄송합니다..(__)ㅋ 제가 질문드리고 싶은건

1. CustomDialogActivity.java  에서 CustomDialog.java 를 호출하여 만드는 시점이 어디인지....

2. CustomDialog.java 에서 왜 CustomDialog extends Dialog 클래스를  만들고 따로 Builder 클래스를 만들어서 해놨는지 처음부터 그냥 Builder extends Dialog 에서 context를 받아와도 되는데 따로 처리해주었는지..

도저히 감이 잡이지 않아 이렇게 올려봅니다...초보라 답변 부탁드립니다.ㅠ.ㅠ