• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

protected 사용 이유

24.04.08 18:14 작성 조회수 141

1

안녕하세요!

해당 강의에서 기본 생성자를 추가해주실 때, public이 아니라 protected를 사용하셨는데, 그 이유가 무엇인가요?

혹시라도 다른 곳에서 기본생성자를 사용하지 못하도록 하게 하기 위함인가요?

 

제가 자바가 안익숙해서 그런지, 이러한 접근 제어자를 쓰는 것이나, static, final 키워드를 언제 쓰거나 안써야 하는지에 대한 감이 별로 없어서 구분을 잘 못하는데, 이러한 실력은 어떤 경험을 더 쌓아야 할지.. 아니면 어떤 키워드를 어떻게 공부해야 더이상 안 헷갈리고 확실하게 알 수 있을지 궁금합니다...!

 

항상 친절한 강의 감사드립니다.

답변 2

·

답변을 작성해보세요.

0

안녕하세요! iwbm312님! 🙂 기본적인 내용은 인프런 AI 인턴이 잘 답변해준 것 같아요! (첨부된 링크도 확인해보시면 도움 될 것 같습니다!)

 

접근제어자, static final 키워드에 대한 감은 확실히 경험적인 면이 강한 것 같습니다!

이런 경우엔 어떤 키워드를 사용해야 하고, 저런 경우엔 어떤 키워드를 사용해야 하는지 다양한 경우들을 피드백을 통해 들으면서 하나씩 학습해나가는 방식이죠!

 

만약 스스로 더 공부해 보고 싶으시다면,

을 확인해보시거나

  • <이펙티브 자바>와 같은 책을 확인해 보시는 것도

좋을 것 같고요!! 👍

 

접근제어자의 경우는 "가급적 최소한의 범위만 열어둔다"는 대원칙을 기억하시는 것으로 충분하지 않을까 싶습니다. 답변이 도움이 되었으면 좋겠습니다. 😊

감사합니다! 🙏

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.08

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

iwbm312님, 질문하신 기본 생성자를 protected로 사용하는 이유와 관련하여 유사한 질문에 대한 답변을 찾았습니다. 이 내용은 Java와 Spring Boot를 사용함에 있어서 객체 지향 프로그래밍의 근간을 이루는 접근제어자, 생성자, 그리고 static, final 키워드 사용에 대한 이해도를 높이는 데 도움이 될 것입니다.

먼저, 기본 생성자를 protected로 설정하는 이유에 대해 설명해 드릴게요. 이는 JPA (Java Persistence API) 사용 시 매우 일반적인 패턴입니다. JPA 스펙이 요구하는 사항 중 하나가, Entity(엔티티) 클래스가 프록시화될 수 있도록 하기 위해 기본 생성자를 최소 protected 접근제어자로 설정하는 것입니다. protected 접근제어자를 사용하는 주된 이유는, 해당 클래스나 상속받은 다른 클래스에서만 생성자를 호출할 수 있게 제한함으로써, 의도치 않은 인스턴스 생성을 방지하고 객체의 일관성을 유지하기 위해서입니다.

관련된 질문은 다음과 같습니다:

이 질문에 답변된 내용 중에서 JPA 설정을 위한 기본 생성자 설정에 대한 설명이 있으며, 추가적으로 필드 타입 선택과 id=null; 설정의 의도에 대해서도 상세하게 설명되어 있습니다. 비슷하게, protected 생성자 사용이 언급되어 있어 엔티티의 세분화된 제어에 대한 이해를 돕습니다.

접근 제어자, static, final 키워드 등의 사용에 관하여는, 객체 지향 프로그래밍과 Java의 특성을 깊이 이해하는 것이 중요합니다. 이러한 키워드를 학습하는 데에는 공식 문서나 객체 지향 설계 관련 서적, 그리고 실제 프로젝트에서 해당 키워드를 사용한 예시를 분석하는 것이 도움이 됩니다. 또한, 다양한 프로젝트와 코드 리뷰를 통한 경험 쌓기가 중요합니다. 접근 제어자의 경우는 클래스 외부에서의 접근을 통제하기 위해, static은 클래스 변수나 메소드가 인스턴스에 속하지 않고 클래스에 속한다는 것을 나타낼 때, final은 값이 변하지 않는 상수나 오버라이딩이 불가능한 메소드 및 확장할 수 없는 클래스를 정의할 때 사용됩니다.

프로그래밍의 다양한 개념들은 실제 코드에 적용해보면서 그 효과와 필요성을 체험해보는 것이 가장 좋은 학습 방법 중 하나입니다. 간단한 프로젝트를 만들어 보면서 접근 제어자를 변경해보거나, staticfinal 키워드를 사용해보는 경험은 이러한 개념들을 더 깊게 이해하는 데 큰 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.