일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- spring
- sql
- javascript
- 가상컴퓨팅
- 클라우드 컴퓨팅
- MVC
- Algorithm
- generic class
- DB
- dbms
- Java
- 공개키 암호화
- Queue
- 자바의정석
- cloud computing
- Stack
- 알고리즘
- python
- 코테
- JPA
- BFS
- 크루스칼
- 생성자
- jsp
- dfs
- data structure
- JDBC
- 자료구조
- 암호학
- 코딩테스트
- Today
- Total
PLOD
[Java] 접근 제어자(access modifier) 본문
접근 지정자는 접근 제어자라고도 불리며, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다. 클래스나 멤버에서 접근 제어자를 사용하는 이유는 클래스의 내부에 선언된 데이터를 보호하기 위해서이다. 데이터가 유효한 값을 유지하도록, 또는 비밀번호와 같은 데이터를 외부에서 함부로 접근하지 못하도록 하기 위해서는 외부로부터 접근을 제한하는 것이 필요하다. 이것을 데이터 감추기(data hiding)이라고 하고 OOP에서 캡슐화에 해당한다.
자바의 접근 지정자는 클래스 내에서 멤버의 접근을 제한하는 역할을 한다. 접근지정자의 종류는 private , public, protected, default가 있다.
한정자 | 클래스 내부 | 동일 패키지 | 하위 클래스 | 그 외의 영역 |
public | ● | ● | ● | ● |
protected | ● | ● | ● | X |
default | ● | ● | X | X |
private | ● | X | X | X |
public은 모든 접근을 허용하고 어떠한 클래스가 접근을 하든 모두 허용한다.
public int studentID;
public String studentName;
protected는 상속관계에서 사용하고,. 상속받은 클래스(자식클래스) 또는 같은 패키지에서만 접근이 가능하다
// 부모클래스
public class customer{
protected String customerGrade;
}
//자식클래스
public class VIPCustomer extends Customer{
public class VIPCustomer(){
super(customerGrade);
}
}
private는 외부에서 접근이 불가능 하고 같은 클래스 내에서만 접근이 가능하다
public class student{
private int studentNum;
}
default는 기본 제한자로써 아무것도 붙지 않고, 자신 클래스 내부와 같은 패키지 내에서만 접근이 가능하다
String studentNmae;
순서대로 private이 가장 많이 차단하고, pubic이 가장 많이 허용한다.
그렇다면 모든 변수를 다 public으로 선언하면 되지 않을까? 접근 지정자를 사용하는 이유는 어떤 변수나 메소드의 접근을 다르게 설정하여
필드의 외부 접근을 막아 개발자가 의도 하지 않은 프로그램 동작을 막을 수 있다.
또한, 코드를 작성하는 사람의 의도를 전달하기 위해서 이다. 또 외부 코드와 의존성을 낮춰 패키지에 따라 접근을 할 수 있게 할 수 있다.
접근 제어자의 핵심은 속성과 기능을 외부로부터 숨기는 것이다
- private 은 나의 클래스 안으로 속성과 기능을 숨길 때 사용, 외부 클래스에서 해당 기능을 호출할 수 없다.
- default 는 나의 패키지 안으로 속성과 기능을 숨길 때 사용, 외부 패키지에서 해당 기능을 호출할 수 없다.
- protected 는 상속 관계로 속성과 기능을 숨길 때 사용, 상속 관계가 아닌 곳에서 해당 기능을 호출할 수 없다.
- public 은 기능을 숨기지 않고 어디서든 호출할 수 있게 공개한다.
캡슐화
캡슐화(Encapsulation)는 객체 지향 프로그래밍의 중요한 개념 중 하나다. 캡슐화는 데이터와 해당 데이터를 처리하
는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다. 캡슐화를 통해 데이터의 직접적인 변경을 방지하
거나 제한할 수 있다.
캡슐화는 쉽게 이야기해서 속성과 기능을 하나로 묶고, 외부에 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨기는
것이다.
'개발 공부 > Java' 카테고리의 다른 글
[Java] 업캐스팅(upcasting), 다운캐스팅(downcasting) (0) | 2023.01.13 |
---|---|
[Java] 클래스- 생성자(Constructor) (0) | 2023.01.12 |
[Java]상속(Inheritance) (0) | 2022.11.11 |
[Java] 자바 용어 정리 및 원리 (0) | 2022.11.11 |
[Java] 추상 클래스(Abstract class) , 메서드(Method) (0) | 2022.11.09 |