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

qheogus55님의 프로필 이미지

작성한 질문수

Readable Code: 읽기 좋은 코드를 작성하는 사고법

메서드 선언부

안녕하세요 private메소드에 대해서 질문 있습니다.

24.10.01 19:37 작성

·

35

0

제가 헷갈려서 질문드려요!private 메소드를 만들게 된다면 무언가 책임이 이상하거나 설계가 잘못되었다는 신호로 알고 있는데요

 

private static void checkIfGameIsOver() {
boolean isAllOpened = isAllCellOpened();
if (isAllOpened) {
gameStatus = 1;
}
}


만약 이런 메서드를 테스트 한다고 하면 어떻게 해야하는건가요?! private메소드를 현업에서도 사용하시는지 궁금합니다.그리고 제가 어디를 잘못알고 있는지도 궁금해요!

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

2024. 10. 04. 07:54

안녕하세요, qheogus55 님!

 

private 메소드를 만들게 된다면 무언가 책임이 이상하거나 설계가 잘못되었다는 신호

전혀 그렇지 않습니다. 강의 중에도 이야기하지만, private 메서드 자체는 public 메서드 내부에서 더 작은 구체적인 개념을 추상화하는 데에 사용됩니다.
즉, private 메서드를 사용하는 것은 지극히 자연스러운 현상입니다.

다만, 비슷한 이야기로 "하나의 객체에 private 메서드가 너무 많으면, 객체의 책임이 둘 이상인지 의심해 보라"라는 이야기가 있는데 이를 혼동하신 것이 아닌가 싶어요.

더불어, private 메서드의 테스트는 public 메서드의 테스트로 충분히 커버 가능합니다 ㅎㅎ

감사합니다 🙂

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 01. 19:41

안녕하세요, 인프런 AI 인턴입니다. qheogus55님.

private 메서드에 대한 테스트 관련 질문에 대해 관련된 기존 답변들을 찾아보았습니다. 다음 두 가지 질문과 답변이 도움이 될 수 있을 것 같습니다:

  1. private 메서드 테스트는 어떻게 하나요?

    • 이 답변에서는 주로 private 메서드를 테스트하고자 하는 상황이 객체 분리를 고려해야 하는 신호일 수 있다는 점을 강조하고 있습니다. 실무에서는 public 메서드의 테스트를 통해 private 메서드가 제대로 작동하고 있는지 간접적으로 확인할 수 있습니다.
  2. 메서드 네이밍 관련해서 질문있습니다!

    • 여기는 메서드 네이밍에 관한 내용도 포함되어 있으나, 객체의 설계와 private 메서드의 역할에 대한 언급도 있습니다.

기본적으로, private 메서드는 단일 책임 원칙(Single Responsibility Principle)을 위반하지 않도록 설계하는 것이 중요합니다. private 메서드는 외부에 노출될 필요가 없는 내부 로직을 캡슐화하는 데 유용하지만, 이를 테스트하기 위해서는 안전장치와 같은 public 메서드를 통해 간접적으로 검증하는 것이 일반적입니다. 만약 private 메서드를 직접 테스트해야 할 경우, 단위 테스트를 위해 mock 객체나 reflection을 사용하여 접근할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.