Kotlin에서 가장 적합한 Builder 모드를 생각해 봤습니다.
이 기사는 Builder 모드에 대해 자세히 설명하지 않습니다.
전제 조건
이번 Builder 모드의 사용 방법으로는 여러 속성이 있는 반에서 구조기로 모두 지정하는 번거로운 상황에서 가져오는 상황을 고려한다.
예를 들어 사용자 데이터를 처리하는 클래스가 있는데 정보는 다음과 같다.
Java의 경우
Effective Java에 소개된 Builder 모드를 참고하여 구현하면 다음과 같은 느낌을 받을 수 있습니다.
public class User {
// 各プロパティを読み取り専用にする
public final Integer id;
public final String name;
public final String email;
public final String password;
public static class Builder {
private Integer id;
private String name;
private String email;
private String password;
public Builder setId(Integer id) {
this.id = id;
return this;
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setEmail(String email) {
this.email = email;
return this;
}
public Builder setPassword(String password) {
this.password = password;
return this;
}
public User build() {
return new User(this);
}
}
// コンストラクタを外部から参照できなくする
private User(Builder builder) {
this.id = builder.id;
this.name = builder.name;
this.email = builder.email;
this.password = builder.password;
}
}
포인트는 다음과 같다.// 各プロパティを読み取り専用にする
public final Integer id;
public final String name;
public final String email;
public final String password;
private User(Builder builder) {
this.id = builder.id;
this.name = builder.name;
this.email = builder.email;
this.password = builder.password;
}
Kotlin의 경우
Kottlin에서 이러한 사항을 구현하면 다음과 같습니다.
data class User private constructor(val id: Int, val name: String, val email: String, val password: String) {
class Builder() {
private var id = 0
private var name = ""
private var email = ""
private var password = ""
fun setId(id: Int): Builder {
this.id = id
return this
}
fun setName(name: String): Builder {
this.name = name
return this
}
fun setEmail(email: String): Builder {
this.email = email
return this
}
fun setPassword(password: String): Builder {
this.password = password
return this
}
fun build(): User {
return User(id, name, email, password)
}
}
}
이 행은 읽기 전용 속성, 외부 참조 구조자를 압축합니다.Java와 달리 User 레벨 구조기의 매개 변수는 Builder가 아닙니다. (Builde r 레벨의 속성에 접근할 수 없기 때문입니다.)
data class User private constructor(val id: Int, val name: String, val email: String, val password: String)
또한 데이터를 분류함으로써 로그 출력과 비교 등을 쉽게 실현할 수 있다.하지만 경고
Private data class constructor is exposed via the generated 'copy' method.
가 나온다.이곳이 허용될 수 있을지 없을지는 사건이다.
총결산
Kotlin에 가장 적합한 Builder 모드를 고려해 보았습니다.나는 포인트가 다음과 같은 두 가지가 있다고 생각한다.
또 같은 방문 수식자라도 언어에 따라 행동이 다르다는 것을 확인했다.
더 좋은 Builder반의 문법이 있다면 의견을 제시해 주세요.
참조 페이지
Reference
이 문제에 관하여(Kotlin에서 가장 적합한 Builder 모드를 생각해 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kmd_htsh0226/articles/96c26d0eeb9c0e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)