java) private 접근제한자는 return으로도 접근가능한가요?

조회수 542회
class A {
  private String name;

  public void getName() {
    return name;
  }
}

이러한 클래스가 존재한다고 할때, 멤버 name은 private으로 설정되어있습니다

private은 클래스 내에서만 접근이 가능하잖아요?

그런데 저렇게 getName() 처럼 public으로 선언된 메소드에 name을 리턴시키면

오류가 안나더군요..

그럼 리턴 받은 인스턴스에서 값을 변경시킨다면 name의 값 또한 변경되는것 아닌가요?

왜냐하면 String 또한 클래스이므로 name도 초기화 시키면 인스턴스가 되므로

리턴을 하게되면 단순 문자열이 아닌 문자열 주소를 리턴시키게되니까,

리턴받은 인스턴스는 name과 같은 주소를 가르키게되겠죠.

그러니 인스턴스에서 값을 변경하면 name의 값도 변경될거라 생각되는데..

이렇게 되면 private이 무슨 의미가 있지하는 생각이 들었습니다..

단순 직접 접근을 제한하는 측면에서라면 이해하겠지만 private 사용이 코드의 안정성?을

높인다고 들었는데 이렇게 리턴해서 접근이 가능하다면 무슨 큰 의미가 있을까 생각이드는데

원래 이런건가요?

1 답변

  • getter 를 사용했을 때 이점에 대한 질문이신거죠?

    getter 를 사용하는건 프로그래머의 선택입니다. 다만 예로 들어주신 문제는 getter 를 사용하지 않는 경우는 피할 수 없는 반면 getter 를 사용하면 clone 을 반환한다거나 멤버 변수의 일부 프로퍼티만 공개하는 등의 방식으로 피할 수 있고요. 이후 멤버 변수의 변경에 대해서도 영향을 클래스 내부에 고립시킬 수도 있고요. 개방-폐쇄 원칙에 대해 알아보시면 도움이 될 것같아요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)