에러 상세 내역
e: file:///C:/Users/TUF/workspace/together-english-backend/src/main/kotlin/com/together_english/deiz/data/member/entity/Member.kt:23:5 Platform declaration clash: The following declarations have the same JVM signature (getPassword()Ljava/lang/String;):
fun `<get-password>`(): String defined in cohttp://m.together_english.deiz.data.member.entity.Member
fun getPassword(): String defined in cohttp://m.together_english.deiz.data.member.entity.Member
오랫만에 프로젝트를 실행해보니 위와같은 에러를 만나게 되었다. 확인해보니 UserDetails의 getPassword 메소드를 오버라이딩해야되기 때문에 다음과같이 선언했던 password를 return 하도록 만들었다.
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
var password: String = password
private set
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
override fun getPassword(): String {
return this.password
}
코틀린에서는 변수의 getter와 setter를 자동으로 만들어주는 기능이 있기 때문에 password라는 변수가있으면 자동으로 getPassword 메소드를 만들게 된다. 하지만 이와 같은 이름의 메소드를 구현하였기 때문에 충돌하여 발생한 에러였다.
해결책
UserDetails 인터페이스를 상속받아 getPassword 메소드를 오버라이딩 해야되기 때문에 해당 메소드의 명은 변경할 수 없다. 그렇기 때문에 password의 변수 명을 변경하여 해당 문제를 해결할 수 있다.