접근 제한자에 대하여
⭐️ 접근 제한자란 ?
접근 제한자란 클래스 , 메서드 , 변수 등에 대한 접근 권한을 제한하여 코드의 보안성과
"캡슐화"를 강화하는데 사용된다.
접근 제한자의 종류는 크게 4가지가 있다 . (public , protected , default , private)
우선 public부터 알아 보자.
⭐️ public
public은 어디서든 접근 가능하다.
같은 클래스 , 다른 클래스 , 모든 곳에서 접근이 가능하므로 가장 개방적인 접근 제한자이다.
[ public 사용 예제 ]
public class Run {
public int a;
public int b;
}
OR
public class Run {
public static void main(String[] args) {
}
}
위 코드와 같이
접근제한자 (static) 반환타입 클래스( (매개변수) ){
}
로 클래스를 선언 할 수 있는데 , public이라고 하면 다른 패키지에 있는 클래스를 import하여
사용하거나 , 같은 패키지라면 import를 생략하고 사용 할 수 있다 ‼️
a 패키지이던 b 패키지이던 상관없이 public인 클래스는 import하여 사용 가능 ‼️
⭐️ protected
같은 패키지 내에서는 자유롭게 접근 가능 하고
다른 패키지에서는 해당 클래스를 상속받은 클래스만 접근 가능하다.
[ protected 사용 예제 ]
ex) 패키지 Example1
public class Example {
protected String name;
protected void display() {
System.out.println("This is protected.");
}
}
ex) 패키지 Example2
class SubExample extends Example {
public void changeName() {
this.name = "New Name"; // 접근 가능
}
}
위 두 코드가 패키지가 다르지만 상속관계라면 Example1의 name에 접근이 가능하다 ‼️
⭐️ default
같은 패키지 내에서만 접근 가능.
다른 패키지에서는 접근 불가 ❌
특정 패키지에서만 사용하는 클래스나 메서드를 선언할 때 사용한다.
[ default 예제 ]
class Example {
String name; // default 접근 제한자
void display() {
System.out.println("This is default.");
}
}
위 코드와 같이 접근제어자가 생략된것은 모두 default가 생략된 것이다.
default는 같은 패키지에서만 접근 가능 ‼️
⭐️ private
private은 같은 클래스 내부에서만 접근 가능 하고 , 다른 클래스나 상속받은 클래스에서도
접근 불가 하며 가장 제한적인 접근 수준이다.
그렇기때문에 정보 은닉을 할 수 있다 ‼️
[ private 사용 예제 ]
public class Example {
private String name;
private void display() {
System.out.println("This is private.");
}
public void setName(String name) {
this.name = name; // 클래스 내부에서만 수정 가능
}
}
위에 작성한 public , protected , default 를 사용한 예제에서 해당 Example에 있는 name과,
display() 메서드를 사용할 수 없다.
그 이유는 private을 사용하여 같은 클래스에서만 사용할 수 있게 제한을 두었기 때문이다 ‼️
접근 제한자의 종류와 접근 제한자를 사용하는 이유를
생각하여 무조건 public으로 다 허용하는 것이 아닌
필요에 따라 정보를 은닉하는 것이 중요하다 ‼️