접근제어자
클래스와 클래스의 멤버(변수, 메서드, 생성자)를 사용할 때, 접근할 수 있는 범위를 지정해 주는 역할을 한다.
보통 접근제어자 또는 접근지정자라고 부르며 클래스나 클래스 멤버 앞에 붙어있는 public, private 등의 키워드가 접근제어자이다.
클래스의 접근제어자
클래스를 정의할 때 사용 가능한 접근제어자는 public, default 두 가지이다.
- public : package에 상관없이 모든 클래스에서 접근이 가능하다.
- default : 생략이 가능하며, 같은 package 안의 클래스에서만 접근이 가능하다.
public class Sample1 {} // public 클래스, 모든 클래스가 접근 가능함
class Sample2 {} // default 클래스, 같은 package안의 클래스만 접근 가능함
변수, 메서드, 생성자의 접근제어자
총 4가지의 접근제어자를 사용할 수 있다.
- private : 같은 클래스 내에서만 접근 가능
- default : 같은 패키지 내에서만 접근 가능
- protected : 같은 패키지 내에서 접근 가능, 다른 패키지의 자식 클래스에서 접근 가능
- public : 패키지 상관없이 모든 클래스에서 접근 가능
공개 범위는 public > protected > default > private 순으로 좁아진다.
정보 은닉
private을 사용하면 외부에서 클래스 내부 정보에 접근을 막을 수 있다.
데이터가 유효한 값을 유지하도록 또는 비밀번호와 같은 데이터를 외부에서 함부로 변경하지 못하도록 하기 위해서는 외부로부터의 접근을 제한하는 것이 필요하다.
객체지향개념에선 캡슐화(encapsulation)라고 한다.
private 변수
private 변수는 디폴트 생성자로 생성이 불가능하다.
private 변수를 지정하는 방법은 크게 2가지가 있는데
- 생성자를 따로 만들기
- setter를 사용
이때 setter 메서드를 public으로 만들게 되면 private 변수를 외부 접근이 가능하게 만들 수 있다.
public class MyDate {
private int day;
private int month;
public int getDay() {
return day;
}
public int getMonth() {
return month;
}
public void setDay(int day) {
this.day = day;
}
public void setMonth(int month) {
this.month = month;
}
}
public static void main(String[] args){
MyDate date = new MyDate();
date.month = 2; //에러 발생
date.setMonth(2);
System.out.println(date.getMonth());
}
참고
'멋진 개발자 > Java & Spring' 카테고리의 다른 글
개발자 성장 기록 53 - Java의 동일성, 동등성 (0) | 2024.04.22 |
---|---|
개발자 성장 기록 51 - MyBatis (0) | 2024.04.18 |
개발자 성장 기록 45 - String, StringBuffer, StringBuilder (0) | 2024.04.09 |
개발자 성장 기록 44 - Concurrent Collection (0) | 2024.04.08 |
개발자 성장 기록 43 - Thread Pool (1) | 2024.04.07 |