Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- spring cloud
- ORM
- mysql
- spring batch
- vm
- 스프링 배치
- Spring Security
- 웹 서버
- CI/CD
- 영속성 컨텍스트
- 스프링 부트
- 스프링 시큐리티
- computer science
- Spring
- 가상화
- Container
- 자바
- spring boot
- 컨테이너
- Java
- virtualization
- HTTP
- JPA
- CS
- 데이터베이스
- 도커
- 백엔드
- 배포
- web server
- 스프링
Archives
- Today
- Total
개발 일기
[Java] 자바 접근 제어자(Access Modifier) 정리 - public/private/protected/default 본문
Back-End/Java
[Java] 자바 접근 제어자(Access Modifier) 정리 - public/private/protected/default
개발 일기장 주인 2024. 6. 4. 02:52정리하게된 계기
스프링 부트를 쓰게되면서 접근 제어자를 고민할때가 정말 많다. 그러나 사실 정확히 알지 못하고 그냥 때려맞추거나 Best Practice를 무작정 매번 따라 가려고한다. 근데 정확히 왜 이게 주로 이렇게 접근 제어자를 설정하는지 이해하면서 개발을 진행하고 싶고 그러기 위해서는 접근 제어자에 대해서 잘 알고 있어야한다는 판단이 섰다. 그래서 정리해보게 됐다.
접근 제어자(Access Modifier)란?
자바에서 접근 제어자는 클래스와 클래스의 멤버인 필드, 메소드, 생성자를 생성할 때 외부에서 접근할 수 있는 범위를 제한해주는 장치이다.
크게 클래스의 접근 제어자와 클래스 멤버의 접근 제어자 이렇게 두가지로 나누어서 고려해볼 수 있다.
클래스의 접근 제어자
클래스를 정의할 때 지정 가능한 접근 제어자는 public과 default 이렇게 두가지이다.
- Public
: public을 사용하면, 프로젝트 어디에서든지 해당 클래스에 접근 가능하다. 즉, 패키지에 한정되지 않는다. - (Default)
: 해당 생성자는 생략 가능하며 클래스 앞에 접근 제어자가 없으면 default 클래스로, 같은 패키지 안의 클래스에서만 접근 가능하다.
클래스 멤버의 접근 제어자
클래스 멤버에는 위에서 언급한 대로 필드(Field), 생성자(Constructor), 메소드(Method)가 있다.
이 3개에 지정할 수 있는 접근제어자로는 4가지가 있다.
- Public
: 패키지와 관계없이 모든 클래스에서 접근 가능하다. - Protected
: 같은 패키지안의 모든 클래스와, 다른 패키지의 자식 클래스(상속받은 경우)에서 접근이 가능하다. - (Default)
: 이 또한 생략 가능하며, 같은 패키지 안의 클래스에서만 접근 가능하다. - Private
: 같은 클래스안에 있는 멤버들만 접근이 가능하다.
공개 범위는 Public > Protected > (Default) > Private 순이다.
그래서 접근 제어자가 왜 필요한가?
프로그램의 안정성 보장
- 객체를 사용하는 사용자가 어떠한 요청으로 인해 객체 내부의 변수나 메서드에 접근할 경우, 의도하지 않은 동작이나 오류가 발생할 수도 있다.
- 위와 같은 의도치 않은 오작동을 접근 제어자를 사용함으로써 예방하고, 프로그램의 안정성을 높일 수 있다.
유지 관리에서의 장점
- 프로그램의 규모가 커질수록 접근 제어자를 통해 코드 관리가 편리해진다.
- 변수나 메소드를 관리할때 접근 제어자를 통해 정해진 범위 내에서 신경써도된다.
- 추가적으로 접근 제어자를 통해 막아놓게되면 예상치 못한 곳에서 사용하려할때 컴파일 오류를 내서 잘못됐다는 것을 알아차리기 쉽다.
'Back-End > Java' 카테고리의 다른 글
[Java] 자바 기본적인 입출력 방법 비교(Scanner와 BufferedReader 그리고 BufferedWriter) (1) | 2024.10.21 |
---|---|
[Java] JDBC(Java DB Connectivity) & HikariCP(Hikari Connection Pool) (0) | 2024.09.21 |
[Java] 로그(Log)/로깅(Logging) 그리고 Java 로깅 프레임워크들 (0) | 2024.05.22 |
[Java] JIT 컴파일러(Just-in-Time Compiler)란? - 컴파일러와 인터프리터의 비교 (2) | 2024.03.06 |
[Java] 자바에 대해 2 - JDK ? JRE ? JVM ? (0) | 2024.03.06 |