Open gyuwon opened 5 years ago
@gyuwon 이슈 등록 감사합니다. 언급해주신 부분 학습한 이후에 글을 추가 보강해보겠습니다.
@gyuwon 말씀 해주신 부분을 제가 제대로 이해했는지 여쭙고 싶습니다.
public List getTypes()
메서드는 실제 ,
구분으로하는 문자열이긴 하지만 캡슐화를 높여서 List 형태로 제공해준다면 이는 좋은 캡슐화 이긴 하지만 정보은닉 개념상의 표현은 적절하지 못한 표현이다.
해당 메소드는 넘겨받은 Set 자로형을 평문문자로 ","
구분해서 변경하는 메소드인데 이 메서드가 private로 외부에 공개 되있지 않으니 이 쪽이 더 정보은닉에 맞는 표현이다. 이렇게 이해하고 있습니다.
정보 은닉이란 말 그대로 알 필요가 없는 정보는 외부에서 접근하지 못하도록 제한하는 것이다.
이 정의에 대해서는 제가 표현한 public List getTypes()
가 정보은닉 개념에 가깝지 않은 것이지 아니면 정의자체가 잘못됬다고 생각하는데 이분도 추가로 여쭙고 싶습니다.
private
메서드가 존재한다는 이유만으로 정보숨김이 사용되었다고 볼 수는 없습니다. private
메서드는 구현으로 볼 수 있고 정보숨김의 결과는 구현보단 인터페이스입니다. 정보숨김의 목적은 설계 피해를 최소화 화는 것입니다. 저는 위 코드의 인터페이스 설계 이유를 알지 못하기 때문에 설계에 정보숨김이 사용되었는지는 모르겠습니다.
정보숨김의 정의는 처음에 말씀드린 것처럼 틀렸거나 모호합니다. 정보숨김을 이해하고 싶다면 다음 두 논문을 읽어보세요.
@gyuwon 친절한 답변과 링크 첨부 감사합니다. 천천히 읽어 보도록하겠습니다.
캡슐화를 설명하는 문서는 정보 은닉(information hiding)을 이렇게 설명하고 있습니다.
이 해석은 틀렸습니다. 정보 숨김은 70년대에 David L. Parnas가 모듈화에 관한 논문들에서 소개한 개념으로 자신할 수 없거나 변경 가능성이 높은 설계 결정을 외부로부터 숨기는 것을 뜻합니다. 위 문서의 예제에서 등장하는
public List getTypes()
메서드와 같은 읽기 접근자(getter)나 쓰기 접근자(setter)를 의미하는 것이 아닙니다. 물론 변경 가능성 높은 설계 결정을 숨기기 위해 읽기 접근자 패턴을 사용했다면 정보 은닉이 적용되었다고 할 수 있겠지만 그 자체로 정보 은닉의 정의가 되는 건 아닙니다.