일반 : 캡슐화와 관련하여 getter와 setter의 필요성 #5
-
|
getter와 setter는 객체의 데이터를 밖으로 꺼내고 수정하게 만든다. private로 기껏 선언해놓고 외부에서 메소드로 접근 가능하게 하는 방식이 옳을까?? getter와 setter는 무슨 이유로 생겼을까? |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments
-
|
해당 Question은 카테고리 -> 공통 Q&A로 이동할게요 |
Beta Was this translation helpful? Give feedback.
-
|
setter는 이유가 명확함. Valid한 데이터를 다루기 위해서. 외부에서 올바르지 못한 값을 속성값으로 설정하려 할 때, setter가 없다면 아무런 제한 없이 값 설정이 가능함. 그렇다고 해서 한 번 객체가 생성되면 속성값이 변경되지 않도록 하면(불변 객체), 객체 생성 비용이 너무나 커짐. (비효율) 조성찬 |
Beta Was this translation helpful? Give feedback.
-
*레퍼런스를 참고해서 한번 정리하려고 합니다. 캡슐화는 객체의 외부에서 객체의 상태를 알거나 변경할 수 없게 만들며 객체의 자율성이 증가될 수 있게 하며 변경에 변화를 받지 않게 하는 OOP의 개념이다. 하지만 대부분 개발을 할때 Lombok 어노테이션을 사용해서 이것을 고민한 개발자는 getter, setter의 사용을 지양하면서 개발을 하지만 외부에서 접근이 필요할 때 사용하고 싶은 충동에 휩싸이거나 아예 사용하지 않게 노력하며 캡슐화를 지킨다는 명목하에 코드의 복잡성이 증가하게 된다. 해당 질문은 위와 같은 상황과 관련해서 private로 선언해서 접근제한을 막았지만, 메소드로 외부 접근을 허용하면 아무런 의미 없지 않나? 라는 의문과 고민에서 발전한것 같다.
주로 getter(setter)을 사용하는 이유는 데이터의 무결성을 위해서라고 한다. 만약 객체의 상태를 누군가 직접 수정을 한다면 어떻게 될까?
OOP 의 기본 원칙은 객체가 구현의 세부 사항을 외부에 노출하면 안된다는 것이다. 이렇게 하면 해당 객체를 사용하는 코드를 변경하지 않고 구현을 변경할 수 있다. 하지만 getter(setter)는 대부분의 경우 구현 세부 정보에 대한 접근을 할 수 있게 한다. 예를들어
(인용)
정리) + 생각 reference
|
Beta Was this translation helpful? Give feedback.
*레퍼런스를 참고해서 한번 정리하려고 합니다.
캡슐화는 객체의 외부에서 객체의 상태를 알거나 변경할 수 없게 만들며 객체의 자율성이 증가될 수 있게 하며 변경에 변화를 받지 않게 하는 OOP의 개념이다.
주로 객체의 상태를 접근 제한자를 활용해 접근을 제한하고(private) 외부에서의 접근을 제한한다.
하지만 대부분 개발을 할때 Lombok 어노테이션을 사용해서
@Getter, 혹은@Setter을 아무 고민 없이 사용하거나, IDE에서 자동으로 만들어서 사용하는 등 고민을 하지 않고 무지성 getter, setter을 사용할 때도 있다.이것을 고민한 개발자는 getter, setter의 사용을 지양하면서 개발을 하지만 외부에서 접근이 필요할 때 사용하고 싶은 충동에 휩싸이거나 아예 사용하지 않게 노력하며 캡슐화를 지킨다는 명목하에 코드의 복잡성이 증가하게 된다.
해당 질문은 위와 같은 상황과 관련해서 private로 선언해서 접근제한을 막았지만, 메소드로 외부 접근을 허용하면 아무런 의미 없지 않나? 라는 의문과 고민에서 발전한것 같다.
주…