위가 질문인데 get 과 set의 단어들과 관련이 있을거 같음!
자바와 같은 객체 지향 프로그래밍 언어에서, 객체의 상태는 그 객체의 필드(또는 멤버 변수)로 표현 된다는데, 이 필드는 객체의 내부 상태를 나타내며, 대부분 private 접근 제어자를 사용하여 외부에서 직접 접근할 수 없도록 한다고 함. 이는 객체의 상태를 보호하고, 잘못된 상태 변경을 방지하는데 중요한 역할!
근데 이 필드의 값을 외부에서 읽거나 변경해야 할 필요가 있을 수 있음. 이럴 때 사용하는 것이 getter와 setter 메서드다 땅땅!
오호 그렇구만..! 더 봐보겠음
Getter는 필드의 값을 반환하는 메서드로, 필드의 값을 읽을 수 있게 해줌. 이 메서드는 보통 'get'이라는 단어로 시작하고, 필드의 이름을 따라서 이름이 지어진다. 예를 들어, 필드의 이름이 'name'이라면, 그에 대한 getter 메서드의 이름은 'getName'이 될 것입니다.
오 어쩐지 뭔가 Java 맨날 같은거 붙어있는거 같던데 이게 그건가 봄!
Setter는 필드의 값을 변경하는 메서드로, 필드의 값을 설정할 수 있게 해줌. 이 메서드는 보통 'set'이라는 단어로 시작하고, 필드의 이름을 따라서 이름이 지어진다. 예를 들어, 필드의 이름이 'name'이라면, 그에 대한 setter 메서드의 이름은 'setName'이 될 것입니다.
오... 얘네가 이런애들 이었구나 지식 + 1
그러나 getter와 setter를 과도하게 사용하는 것은 객체 지향 설계 원칙에 위배될 수 있음!!! 객체는 자신의 상태를 스스로 관리해야 하며, 그 상태를 외부에서 자유롭게 접근하거나 변경하는 것을 허용하면 객체의 캡슐화 원칙이 깨질 수 있음!
따라서, getter와 setter는 필요한 경우에만 제한적으로 사용해야 하며, 가능한 한 객체의 메서드를 통해 객체의 상태를 변경하고 조회하는 것이 바람직함! 이렇게 하면 객체의 상태를 보호하고, 객체의 책임을 유지할 수 있습니다.
포인트가 이거구나
좀 더 검색해보니 캡슐화 뿐만아니라 몇가지 이유가 더 있었음!
캡슐화 위반: 객체의 상태는 해당 객체만이 관리해야 합니다. getter와 setter를 통해 외부에서 객체의 상태를 자유롭게 변경하거나 조회하게 하면 객체의 내부 구현이 외부에 노출되고, 이는 캡슐화 원칙에 위배될 수 있음
객체의 책임 무시: 객체 지향 프로그래밍에서 각 객체는 자신만의 책임을 가지고 있습니다. 그러나 getter와 setter를 사용하면 객체의 상태를 외부에서 변경하거나 조회하게 되므로 객체의 책임이 무시될 수 있음
데이터 중심 설계: getter와 setter를 과도하게 사용하면 데이터 중심의 설계로 이어질 수 있습니다. 이는 객체가 데이터의 저장소로 여겨지고, 비즈니스 로직이 외부에 분산될 수 있음
해결방법 - 객체의 상태를 변경하거나 조회할 때는 해당 객체의 메서드를 통해 이를 수행
메서드들은 객체의 상태를 적절히 관리하며, 객체의 책임과 캡슐화 원칙을 유지
이렇게 하면 객체의 내부 구현이 외부에 노출되지 않고, 객체 지향 설계 원칙을 더 잘 준수할 수 있다고 함!
gony님 안녕하세요! 201팀의 포이입니다. 글 잘 읽었습니다! 글에 대한 피드백 노션에 정리해봤으니 확인 부탁드립니다~ 감사합니다~
https://cheddar-liquid-051.notion.site/gony-bad85f5ca8044fc29c8c4cf7e0cbb91f?pvs=4