ssausand-sunny / cs-study

면접.. 붙으려면 CS 공부 해야겠지?
0 stars 0 forks source link

접근지정자를 지정하지 않으면, 적용되는 접근지정자는 무엇인가요? #22

Open kjy0349 opened 4 months ago

kjy0349 commented 4 months ago

문제

접근지정자를 지정하지 않으면, 적용되는 접근지정자는 무엇인가요?

예상 꼬리 질문
  1. default 접근지정자와 protected 접근지정자의 차이는 무엇인가요?
  2. 접근지정자를 사용해 비즈니스 로직을 구현하거나, 특정 목적을 이룬 경험이 있으면 말해주세요.

들어가야 할 키워드 정리

kgh2120 commented 4 months ago
예상 답변 Class의 경우 접근 지정자를 지정하지 않으면 Class와 동일한 패키지에서만 접근이 가능한 package-private 접근 제한자가 적용됩니다. Interface의 경우 메서드의 경우 public abstract가, 변수의 경우 public static final이 적용되어 상수로 변환됩니다. **package-private은 반드시 동일한 패키지에서만 가능 하위 패키지 X**
예상 꼬리 질문 답변 - default 접근지정자와 protected 접근지정자의 차이는 무엇인가요? 아마도 default가 아무것도 적지 않은 상태인거로 생각하는 것 같은데... package-private 접근 지정자와 protected의 차이는 상속한 클래스에서 메서드가 접근 가능한지의 차이입니다. 둘 다 동일한 패키지에서만 접근이 가능하지만, protected의 경우 서로 다른 패키지에 있어도 부모 클래스의 메서드에 대해서 자식 클래스에서 접근이 가능합니다. // default 접근 지정자는 interface에서 메서드 구현부가 있는 public 메서드를 만들 때 사용하는 접근 지정자입니다. - 접근지정자를 사용해 비즈니스 로직을 구현하거나, 특정 목적을 이룬 경험이 있으면 말해주세요. 대체로 public 접근 지정자와 private 접근 지정자만을 사용해봤습니다. 비즈니스 로직을 구현할 때엔 인터페이스를 작성 후 구현체에서 비즈니스 로직을 작성하여 public 지정자를 이용했고, 해당 비즈니스 로직을 구현하는 과정에서 추출한 메서드나, 공통으로 사용되는 메서드를 private으로 추출하여 사용한 경험이 있습니다. ++ 추가로 물어본다면.. protected : 상속 관계에서 변수에 대해서 private이 아닌 protected를 사용한 경험이 있다. default : Repository에 대한 인터페이스를 제작할 때, PK값을 auto_increment값이 아닌 UUID를 사용한 경험이 있었다. 이 상황에서 default 메서드를 통해 구현한 경험이 있다.
Hunnibs commented 4 months ago
질문 답변

접근지정자를 따로 지정하지 않는다면 default 접근지정자가 설정되게 됩니다. default 접근지정자는 private-package라고 불리며 동일한 패키지 내에서만 접근이 가능하도록 합니다.

꼬리 질문

1. default 접근지정자와 protected 접근지정자의 차이는 무엇인가요? default 접근지정자와 protected 접근지정자는 모두 동일 패키지에서만 접근이 가능하도록 설정됩니다. 하지만 protected 접근지정자를 설정할 경우 다른 패키지에서 상속을 받는다면 해당 클래스에 접근이 가능하게 된다는 차이점이 존재합니다. 2. 접근지정자를 사용해 비즈니스 로직을 구현하거나, 특정 목적을 이룬 경험이 있으면 말해주세요. 프로젝트에서 사용하지는 않았지만 알고리즘 공부를 진행하며 작성했던 코드들을 접근지정자를 사용해 관리했던 경험이 있습니다. 알고리즘 스터디를 진행하면서 작성했던 코드들을 단계별로 패키지로 나누어 저장하고 관리하면서 동일한 역할을 하는 Method들을 작성했을 때 private으로 작성하지 않으면 다른 문제를 해당 패키지 내에서 풀 때 다른 패키지의 Method나 Custom Class들을 불러오게 되는 실수를 범하면서 private으로 모두 관리하며 해당 문제점을 해결했었습니다.

kjy0349 commented 4 months ago
질문 답변 기본적으로 package-private한 접근지정자가 지정됩니다.
예상 꼬리 질문 답변
  • default 접근지정자와 protected 접근지정자의 차이는 무엇인가요?
    1. 기본적으로 지정되는 접근지정자의 경우, package-private로 불립니다. 동일한 패키지내에서는 접근할 수 있지만, 다른 패키지에서는 접근할 수 없습니다. protected는 package-private와 같이 동일 패키지 접근 가능, 다른 패키지 접근 불가능이지만, 해당 클래스를 상속할 경우 다른 패키지에서도 접근할 수 있게 됩니다.
  • 접근지정자를 사용해 비즈니스 로직을 구현하거나, 특정 목적을 이룬 경험이 있으면 말해주세요.
    1. spring이나 jsp에서 사용하는 Java bean 규약을 지키기위해 클래스 멤버변수들을 private 접근지정자를 이용해 선언한 경험이 있습니다. 이렇게 private 접근지정자를 지정한 이후 필요한 변수에만 getter와 setter를 지정해 사용함으로써, 해당 클래스 객체가 개발자가 의도하지 않은대로 동작 하는것을 막을 수 있었습니다.
    Leeminw commented 4 months ago
    예상 답안

    default 접근 지정자로 선정되며 같은 패키지 내에서만 사용됩니다.

    예상 꼬리 질문 답안

    - default 의 경우 같은 패키지내에서 사용되는 접근 제한자 입니다. protected의 경우 같은 패키지내에서 사용되는 것과 더불어 해당 클래스를 상속받은 클래스 역시도 사용할 수 있는 제한자입니다. - 알고리즘 레포지토리에서 함수를 구현할 때, 많은 문제에서 사용되는 알고리즘 이름인 dfs, bfs 등의 경우, public으로 설정하면 다른 클래스에서 사용될 수 있기 때문에 이를 방지하기 위해 private 제한자를 설정하여 구현하고 있습니다.