• 로그인 함 해보끄나?

  • Sarangnamu.net June 17, 2003
    Home Login Profile Study Open Project Q&A Google Code
    kotlin 그리고 java builder 패턴
    Last Modify : 13 November, 2019(10:58)
    java 에선 매우 유용하던 builder 패턴이 kotlin 으로 넘어가면서 다소 계륵이 된듯한 느낌이지만 어찌되었던 간에 kotlin + java 의 상황에서는 신규로 만드는 kotlin 코드에서도 java 에서 builder 패턴 으로 호출 할 수 있도록 작업이 필요하다. 
    물론 순수 kotlin 으로만 되어 있다면 data class 에 apply 만 이용하면 비슷한 효과를 얻을 수있으므로 필요 없는 작업이 되겠지만 기존의 프로젝트의 경우 java 와 섞여 있으니 =_ = 해야 된다. 
     
    가령 기존의 java 코드가 아래와 같았다면 
     
    final class WindowDelegateParams {
        public final String url;
        public final String windowName;
        public final String[] params;
     
        private WindowDelegateParams(final Builder builder) {
            url         = builder.mUrl;
            windowName  = builder.mWindowName;
            params      = builder.mParams;
        }
     
        public static Builder builder() {
            return new Builder();
        }
     
        public final static class Builder {
            private String mUrl;
            private String mWindowName = "defaultWebWindow";
            private String[] mParams;
     
            private Builder() {
     
            }
     
            public Builder windowName(@NonNull final String windowName) {
                this.mWindowName = windowName;
                return this;
            }
     
            public Builder params(@NonNull final String[] params) {
                this.mParams = params;
                return this;
            }
     
            public Builder url(@NonNull final String url) {
                this.mUrl = url;
                return this;
            }
     
            public WindowDelegateParams build() {
                return new WindowDelegateParams(this);
            }
        }
    }
     
    kotlin 에서는 아래와 같이 변환할 수 있다 .
     
    data class WindowDelegateParams(
        val url: String?,
        val windowName: String,
        val params: Array<String>?
    ) {
        companion object {
            @JvmStatic
            fun builder() = Builder()
     
            class Builder {
                private var url: String?            = null
                private var windowName: String      = "defaultWebWindow"
                private var params: Array<String>?  = null
     
                fun url(url: String) = apply {
                    this.url = url
                }
     
                fun windowName(name: String) = apply {
                    this.windowName = name
                }
     
                fun params(params: Array) = apply {
                    this.params = params
                }
     
                fun build() = WindowDelegateParams(
                        url,windowName, params)
            }
        }
    }

    이렇게 해두면 java 에서 kotlin 코드를 호출 시 동일하게 사용할 수 있으므로 코드 호환성이 보장 되며 코드양도 좀 줄어드는 효과는 있다. 
     
    끝. 

     

    Comment


    입력하3 1591024935



    Locations of visitors to this page