공개, 보호, 개인 사용을위한 모범 사례?


12

private무언가를 코딩 할 때 모든 것을 기본으로 설정하는 것이 좋습니다 .

그런 다음 protected하위 클래스에 필요한 경우 또는 public다른 클래스에 필요한 경우 에만 업그레이드 하십시오.


2
일부 API를 작성하는 경우 호출자가 필요할 수있는 기능을 예상해야합니다. 따라서 액세스 수정 자에 대해 더 많은 생각을해야합니다. 누가 작성한 코드를 사용하는지에 따라 다릅니다.
user2023861

가능한 모든
gnat

답변:


10

짧은 답변 :

더 긴 답변 :

그렇습니다. 그러나 모든 것을 비공개로 수업을 시작하는 제안으로 해석되어서는 안됩니다. 이러한 접근 방식은 인터페이스를 설정하기 전에 구현 세부 사항에 중점을 두어 클래스 디자인을 의미합니다.

클래스를 디자인 할 때 고려해야 할 가장 중요한 측면 중 하나는 클래스 사용 방법입니다. 여기에는 개인 / 구현 세부 사항에 대해 생각하기 전에 공개 방법에 대한 생각이 포함됩니다.

또한, "이 수업에 대한 단위 테스트를 어떻게 작성합니까?" -실제로 단위 테스트를 작성하지 않더라도 물어볼 중요한 질문입니다. (관련 : "테스트 가능한 코드를 홍보하는 디자인 원칙은 무엇입니까?" )

따라서 공용 인터페이스를 정의한 후에는 나머지를 개인용으로 기본값을 지정하는 것이 좋습니다. 대부분의 경우 일반적으로 클래스 외부의 다른 항목에 대해서는 중요하지 않은 구현 세부 사항이기 때문입니다.


따라서 내가 말한 내용을 요약하려고하면 (내가 이해하고 있는지 확인하기 위해) 대신 공개 인터페이스를 먼저 생각하는 것이 좋습니다 (즉,이 클래스는 실제로 어떻게 사용됩니까? 외부에서 시작하여 다른 모든 것을 비공개로 설정 하시겠습니까?
AJJ

1
@ArukaJ 좋은 접근 방식은 구현을 빌드하기 전에 클래스를 사용할 코드를 작성하는 것입니다. 먼저 단위 테스트 작성을 시작할 때까지 약간의 닭고기 또는 계란 문제 일 수 있습니다.
JimmyJames

1
@ArukaJ 광범위하게 예; JimmyJames가 언급했듯이 단위 테스트를 작성할 때 훨씬 직관적으로 느껴지지만 처음에는 더 어려워 보일 수 있습니다. 약간 다른 사고 방식이 포함될 수 있지만, 목표는 클래스가 나타내는 것과 입력 / 출력이 어떻게 보이는지에 대해 더 신중하게 생각하는 것입니다. 응집력이 높은 깔끔하게 캡슐화 된 클래스를 만들 가능성이 더 높습니다.
Ben Cottrell

단위 테스트는 실제로 클래스 테스트를 사용하지 않을 것이기 때문에 단위 테스트를 사용하여 클래스를 디자인하는 것에 대한 대답입니다. 그러나 수업이 어떻게 사용 될지 생각하는 것보다 확실히 낫습니다.
user949300

8

"그런 다음 서브 클래스에 필요한 경우 보호로 업그레이드하거나 다른 클래스에 필요한 경우 공용으로 업그레이드합니까?"

그것은 잘못된 접근법입니다. 디자인 타임에, 당신은 당신이 무엇을 공용 액세스 알아야 합니다 제공 할 수 있습니다. 수업의 전체 목적이기 때문에 일반적으로 공개 액세스 권한을 부여합니다. 그리고 서브 클래스가 사물에 액세스하기를 하므로 보호 된 액세스 권한을 부여 합니다. 그리고 당신은 다른 사람의 사업이 아닌 것을 위해 개인을 사용합니다.

이제 누군가 접근 할 수없는 것들에 접근 해야 한다면 , 그 필요성 에 대해 정말로 열심히 생각 해야합니다 . 액세스 가 필요 하지 않거나 디자인이 잘못되었습니다. 디자인 잘못되었거나 공개되지 않은 것이 공개되어 있으므로 변경하십시오. 그러나 디자인이 옳다면 필요 에 문제 있으므로 디자인을 손상시키는 대신 수정 하십시오.


하자 당신이이 때 서브 클래스에 의도하지 않는 (그리고하는 클래스가 있다고 가정 할 수 필요가 없습니다) 그리고 당신이 경우에하는 방법 이었다 클래스를 하위 클래스, 유용 할 것이다 / 서브 클래스에 의해 /에 필요합니다. 당신은 그 방법을 만들 것 private또는 protected?
lfk

받아 들일만한 대답이어야합니다. 생각하고 싶지 않은 디자인처럼 처음에는 모든 것을 비공개로 만듭니다.
Niing

1

객체 지향 프로그래밍의이 측면을 이해하는 열쇠는 데이터 캡슐화 의 개념입니다 . 아이디어는 구현 세부 사항을 숨겨 클래스를 이해하기 쉽게 만드는 것입니다. 이것을 데이터 숨김 이라고 합니다 . 따라서 클래스를 사용하는 데 필요한 함수 만 공개 (공개)하려고합니다. 이 함수는 클래스에 대한 인터페이스 입니다.

자동차의 바퀴와 같은 인터페이스를 생각하십시오. 휠을 돌려 차의 방향을 결정하지만, 덮개 아래에는 회전 밸브, 유압 장치, 바퀴 회전을 변경하는 풀리가 있지만 차를 운전하는 기계 엔지니어는 필요하지 않습니다.

따라서 귀하의 질문에 대한 대답은 그렇습니다. 가능한 한 다른 클래스에서 클래스에 대한 많은 세부 정보를 숨기려고합니다. 공개, 비공개 또는 보호 대상이되는시기를 이해하는 것은 배우기 쉽지만 마스터하기는 어렵습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.