자바 하면서 빼 놓을 수 없는 접근 제어자에 대해서 알아보도록 합시다
매서드를 선언하거나 final 키워드로 변수를 초기화 할 때 보면 앞에
public 이나 private 또는 protected 이러한 키워들 적어 주는걸 볼 수 있을겁니다
이것은 아주 중요한 접근 제어자 이므로 알고 넘어 가야합니다
우선 표로 확인해 봅시다
public | protected | default | private | |
동일 패키지, 클래스 | O | O | O | O |
동일 패키지, 상속 | O | O | O | X |
동일 패키지, 상속 아님 | O | O | O | X |
다른 패키지, 상속 | O | O | X | X |
다른패키지, 상속 아님 | O | X | X | X |
이 표를 기억합시다 ㅎㅎ
public은 어디서나 접근 생성이 가능한 반면 private를 보면
같은 패키지와 같은 클래스 에서만 접근이 가능한걸 보면 보안에 유리한 것을 볼 수 있습니다
소스로 한번 봅시다
class Sample {
public String a(){
return "public a";
}
private String b(){
return "public b";
}
public String c(){
return b();
}
}
public class DemoCalss {
public static void main(String[] args) {
//Sample 클래스를 new 키워드로 인스턴스 생성
Sample a = new Sample();
//생성 된 인스턴스 주소를 a 변수가 갖고있고 Sample클래스의 메서드에 접근 가능함
//a매서드는 접근 제어자가 public이므로 접근 가능
System.out.println(a.a());
//c메서드는 접근 지시자가 public 이지만 return을 보면 private인 b메서드를 호출 하므로 에러발생함
System.out.println(a.c());
}
}
인스턴스를 생성 하더라도 접근 지시자에 의해서 접근이 되질 않습니다
접근 하고자 하면 Sample 클래스 내에서 호출을 해야 에러 없이 접근이 가능합니다
이러한 제어는 왜 생긴것일까 생각 해볼수있다 물론 보안에 관련되고 있기는 하지만
엄청난 보안이 필요한 프로젝트라고 한다면 예를 들어 데이터 베이스의 접속 정보와
커넥션을 맺는 그런 클래스라고 한다면 함부러 그 안의 메서드를 사용하게 해서는
안될거에요 그럴때 검증과 정상적인 경로로 접근 했는지 확인하는 일련 과정을 거치게
할 수도 있습니다 그렇기에 접근 제어자가 필요한 이유중 하나입니다
public으로 지시한 메서드를 통해서 그 안에 검증로직을 짜고 정상적인 루트로 접근 하면
그 내에 다른 메서드를 이용해서 요청을 처리해줘도 된다는 말이죠 ㅎㅎ
그리고 우리가 만약 은행 홈페이지를 구현한다고 하면 아주 아주 민감한 정보들이 많을겁니다
개인정보는 말할것도 없고 계좌번호 잔액 이러한 부분은 절대적으로 보안에 신경 써야할겁니다
그럴때 private키워드를 사용하여 다른 클래스 패키지에서 호출 하지 못하도록 오로지
계좌에 관한 데이터를 넘겨주는 클래스만을 사용하여 호출 하도록 해야합니다
마지막으로 간단하게 개념을 정리하자면
public은 클래스는 다른 패키지의 클래스에서도 사용 가능하고 default는 같은 패키지에서만 가능
private는 같은 클래스 같은 패키지 이 내용은 확실히 기억하고 넘어가도록 합시다
'Developer > Java' 카테고리의 다른 글
[java] 예외처리 (0) | 2022.08.18 |
---|---|
[java]추상(abstract) (0) | 2022.08.18 |
[java]오버라이딩 (0) | 2022.08.03 |
[java]상속 (0) | 2022.08.02 |
[java]생성자 (0) | 2022.07.29 |