해결된 질문
작성
·
140
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
클래스, 클래스의 필드나 메서드의 접근 제어자를 설정해줄 때, 어떤 것들을 private로 하고 어떤 것들을 public으로 설정하는 것이 바람직한지를 알고 싶습니다. 일관적인 기준이 있나요?
예를 들어, MemoryMemberRepository는 public이고 store는 private으로 설정해주셨는데, 그 이유를 알고 싶습니다.
답변 1
1
안녕하세요. 최건우님, 공식 서포터즈 y2gcoder입니다.
기본적으로 접근제어자는 캡슐화와 관련된 기능이라고 생각합니다. 접근제어자를 통해 대상에 접근하는 방법을 제한해둠으로써 좀 더 명확하고 안전한 코드를 작성하는데 도움을 주는 기능이라 생각합니다. 예시를 들어주신 MemoryMemberRepository 를 예시로 들어보겠습니다.
먼저 MemoryMemberRepository 는 Member 데이터 저장소로서 다른 곳(패키지, 클래스)에서 사용할 수 있어야 합니다. 그래서 다른 곳에서 이 레포지토리 를 사용(Member 데이터 저장, 조회 등)할 수 있도록 public 으로 열어준 것입니다.
반면에 MemoryMemberRepository 의 store는 다른 곳에서 수정할 수 있도록 열어주면 어디서 store의 값이 추가되고 수정되는지 파악하기 힘들어집니다. 그 말은 명확한 코드 작성을 할 수 없다는 뜻입니다. MemoryMemberRepository에서 store에 데이터를 추가하고 삭제하는 등의 기능을 제공해주고 있고, 해당 메서드들은 MemoryMemberRepository 를 불러온 곳에서 사용할 수 있게 public으로 열어줬기 때문에 store 자체는 MemoryMemberRepository 에서만 사용할 수 있도록 private 으로 닫아줍니다.
보통 엄격하게 적용하는 분들은 모든 부분을 최대한 private 등으로 닫아둔 후 개발함에 따라 public으로 열어주기도 합니다. 저는 보통 생각없이 개발할 때는 Service, Repository 클래스 들은 public 으로 열어주고, method 들은 사용하는 곳에 따라 private, public 을 사용합니다. 주로 데이터나 상태가 담긴 필드들은 private으로 막아 놓고 해당 값을 조회하거나 변경하는 메서드는 getter, setter 혹은 의미있는 public 메서드를 열어서 접근하고 있습니다.
감사합니다.
감사합니다!