내가 getter setter를 자바로 배울땐
필드 접근을 개발자 의도대로 제어하기 위해 저런 패턴을 쓰는거라 배웠고
실제로 DTO, VO 말고 getter, setter 필요한 상황이면
필요한 맴버만 골라서 getter, setter 를 열어주는 쪽으로 클래스를 설계해 왔습니다.
근데 코틀린 공부하다 보니까 맴버를 선언하면 그냥
A.c = 10
이런식으로 하라고 하더군요
그러면서 이미 내부적으로 getter setter 구현 되어있으니 안심하고 쓰라고 하는데
처음엔 저도 오~ 귀찮게 set get 없이 그냥 구현하면 되겠구나~ 했다가
다시 곰곰히 생각해보니
애초에 사용자가 의도 외의 목적으로 접근 하지 말라고 getter setter 패턴이 나온거로 아는데
private 를 걸든 말든 암튼 내부적으로 게터 세터 구현 했으니 그냥 쓰면 된다는게
이게 public 걸어둔거랑 도데체 안전상으로 무슨 차이가 있는건지 의문이 들었습니다.
여러분들은 어떻게 생각하시나요?
혹시 제가 잘못 이해한거라면 지식나눔 바랍니다.
감사합니다.
난 안전상 문제는 애초에 무쓸모라 생각하고 get하거나 set할 때 특정 작업을 동시에 진행시키고 싶을 때 씀.난 코틀린은 모르겠고 C#하는데 예를들어 클래스 내에서 string sexYN과 bool sexBool이 2개 필요한데 sexYN은 Y인데 sexBool은 false인 상황을 막고싶으면 sexBool을 set할때 sexYN = value ? "Y" : "N"; 이런식으로 자동으로 두개를 맞출때 주로 씀. 물론 get할때도 return sexYN == "Y"가 되겠지
저도 java나 c++ 할때는 답변자 님 처럼 활용을 해왔는데 코틀린은 흠... 아니더라구요 그냥 필드 선언한 그 순간 내부적으로 get, set이 만들어진다고 하니.. 이게 뭔가.. 하는 생각이 들어서 말이죠..
C#도 그럼 선언할때 getset 자동으로 붙는얘가 있고 나중에 저렇게 getter setter에 기능이 추가/변경될 일이 생기면 구현하고 기존코드 수정할 필요없이 그냥 클래스 내부에서만 관리하면 되서 좋다는 뜻임
자바에서 A.c=10이라 짰다가 c의 setter을 만들어야되면 클래스에 setC를 만들고 코드자체를 A.setC(10)로 바꿔야 하지만 내부에 자동으로 들고있으면 코드자체는 손안대고 클래스에서 c에 대해 관리만 하면 되니 독립적이지
ㅇㅎ.. 이런 설계였구나..
이제 이해가 되었습니다! 감사합니다!
그거 javabean 라 하는데 가끔 get~ 메소드 패턴으로 데이터 뽑기도 함ㅇㅅㅇ