대머리개발자

멤버 변수 바인딩에 대한 고민 본문

개발이야기/코틀린

멤버 변수 바인딩에 대한 고민

대머리개발자 2024. 3. 29. 15:32
728x90

자바가 익숙했다면 묻지도 따지지도 않고 작업했던

private 멤버 변수와 getter/setter는 그냥 공식이다. f= ma

무조건하는 이유가 있다.

  1. 데이터의 무결성을 보장해 준다.
  2. 내부 상세를 숨긴다. (캡슐화)

디테일은 몰라도 남들 다 하니깐!

 

 

자바에서의 공식을 코틀린에서는 자동으로 해준다. 🌟👍

But 쓸모가 없다. 자동으로 만들어 지는 두 가지 조건 중 하나가 public 이다.

data class BoardDto(
    public var title: String
    , ...
}

 

근데 public을 사용하게 되면 어차피 직접 접근이 가능하기 때문에 실상 getter/setter가 필요 없다.

근데 굳이 왜 만들어주는거야? 전혀 쓸모가 없자뇨!!

 

data class BoardDto(
    private var title: String,
}

 

심지어 요세 추세는 getter/setter 를 지양한다고 한다.

쌈박하네..

 

지금까지 발생한 오류를 가만 잘 생각해 보면 95%이상은 데이터가 문제였을 것이다.

(로컬에서는 잘 되는데.. 운영에서 안 된다.? 리소스가 똑같은데 왜 그란데?) 

 

백발백중 데이터다.

 

해서 immutable하게 관리하려고 하는것이다. 

 

여기저기서 갔다쓰고 여기저기서 설정하면 이슈 트래킹은....하악하악!!

 

지양은 쓰지 말라는것이 아니다.! ㅎ 

최대한 안 쓰려고 노력하다보면... 길이 보이겠쥬.

 

 

예를들어 보자!

boardDto 멤버 변수를 getter를 이용해서 접근하고 있다.(컴파일 생성 시 자동변환)

 

데이터의 바인딩을 DTO 내부에서 진행하면 this로 접근 할수 있으니 private하게 사용할 수 있겠다.

 

찐으로 필요한 녀석만 get를 만들어서 사용하면 되겠다. 그럼 애초에..val을 쓰면 되는 거 아니냐?ㅋㅋ..하악하악

 

대충 하자..

 

어플리케이션이 작동하는데는 문제 없으니 ..!!ㅋ

 

 

하나 더 예를 들어보자

...
commentEntity = commentRepository.findByIdOrNull(commentDto.id)  ?: throw Exception("comment is null")
commentEntity.content = commentDto.content
...

 

마치 setter와 같은 느낌이다. ㅎ

commentEntity = commentRepository.findByIdOrNull(commentDto.id)  ?: throw Exception("comment is null")
commentEntity.updateContent(commentDto.content) 


~~

fun updateContent(content: String){
    this.content = content
}

 

 

 

eㄴㅇㄹㄴㅁ

 

ㅇㄹ

 

 

immutable

 

 

728x90

'개발이야기 > 코틀린' 카테고리의 다른 글

데이터 정규화  (1) 2024.05.17
[코틀린]null 처리 재미지다!  (0) 2024.04.02
코루틴 조으다!  (1) 2024.03.19
아르메리아를 쓰자.  (1) 2024.03.15
ModelMapper - LocalDateTime처리  (1) 2024.01.29