인프런 커뮤니티 질문&답변

최건우님의 프로필 이미지
최건우

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 도메인과 리포지토리 만들기

클래스 필드의 접근 제어자 설정 기준

해결된 질문

작성

·

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 메서드를 열어서 접근하고 있습니다.

감사합니다.

최건우님의 프로필 이미지
최건우
질문자

감사합니다!

최건우님의 프로필 이미지
최건우

작성한 질문수

질문하기