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

dev.rudevico님의 프로필 이미지
dev.rudevico

작성한 질문수

김영한의 실전 자바 - 기본편

문제와 풀이

부모(Item) 클래스의 생성자 및 메서드의 접근 제어자가 public인 이유

작성

·

206

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요. 강의 잘 듣고 있습니다.

해당 강의에서 부모 클래스인 Item의 생성자 및 print(), getPrice()메서드에 대한 접근제어자를 public으로 설정하셨습니다.

제 생각에는 ShopMain 클래스에서 부모 클래스에 접근할 때에는 모두 Item의 자식(book, album, movie)을 통해서만 접근하는 상황이고 이러한 접근 방식이 옳다고 판단되어서 부모 클래스의 생성자 및 메서드의 접근 제어자를 protected로 설정하였습니다(당연하게도 해당 예제에서 실행 결과는 public으로 했을 때와 동일합니다).

이 경우에 언젠가는 자식 클래스를 통해 접근하지 않을 경우가 발생할 수 있기 때문에 public으로 설정을 하신 걸까요? 아니면 protected로 설정하는 것이 조금 더 논리에 맞는 걸까요?

package extends1.ex;

public class Item {
    private String name;
    private int price;

    protected Item(String name, int price) {
        this.name = name;
        this.price = price;
    }

    protected void print() { //이름과 가격은 모든 자식에서 동일하게 수행하는 기능이므로 부모에 구현
        System.out.println("이름:" + name + ", 가격:" + price);
    }

    protected int getPrice() {
        return price;
    }
}

 

답변 1

0

저가 생각 하기 에는 상황(때)에 따라 달라 질 것 같습니다.(논리가 달라짐)
인터넷 에서 상품(item)을 보여주기(가격, 정보) 위해 서라면 public.

ex) 인터넷에서 책의 정보를 볼 때

인터넷에서 상품(item)을 살려고 할 때, 아니면 장바구니에 집어 넣을 때 라면 public 말고 dev.rudevico님 말대로 protected나 default, private를 쓸것 같습니다.

ex) 인터넷에서 책을 사려고 장바구니에 담을 때

dev.rudevico님의 프로필 이미지
dev.rudevico
질문자

좋은 의견 감사합니다 ㅎㅎ

dev.rudevico님의 프로필 이미지
dev.rudevico

작성한 질문수

질문하기