- 접근제한자
접근제한자로 OOP의 4가지 특징 중 캡슐화를 가장 잘 표현할 수 있습니다. 접근제한자는 멤버 변수 및 메서드를 선언할 때 사용하며, 접근제한자를 통해 멤버 변수 및 메소드를 공개하는데 있어서 제약을 걸 수 있습니다.
접근제한자를 통해 데이터 접근을 제한한 예시입니다.
import java.io.*;
class Main {
public static void main(String[] args) {
ClassExample ce;
ce = new ClassExample();
ce.mDouble = 10; // 오류 발생
ce.CE_Print_mDouble();
ce.CE_Set_mDouble(30);
ce.CE_Print_mDouble();
}
}
class ClassExample {
private double mDouble;
public void CE_Print_mDouble() {
System.out.println(mDouble);
}
public void CE_Set_mDouble(double dInput) {
mDouble = dInput;
}
}
앞에서 사용했던 예제를 활용하여 멤버 변수 및 메서드에 접근제한자를 사용하였습니다. 멤버 변수인 mDouble에 private를 사용했으며, 각 메서드들에는 public을 사용해주었습니다.
위 예제는 정상 동작하지 않습니다. 바로 7번째 줄에서 오류가 나기 때문입니다., 이는 바로 private 형인 mDouble을 ClassExample 객체 외부에서 접근했기 때문입니다.
private 접근제한자는 객체 자기 자신 안에서만 사용할 수 있도록 제한하는 구문이므로 7번째 줄처럼 객체 바깥에서 멤버에 직접 접근을 시도하면 오류가 발생하게 됩니다. 따라서 위 예제처럼 private 형의 접근제한자를 가진 멤버에 접근하고 싶다면 public으로 선언된 멤버를 활용해야 합니다.
import java.io.*;
class Main {
public static void main(String[] args) {
ClassExample ce;
ce = new ClassExample();
ce.CE_Set_mDouble(30);
ce.CE_Print_mDouble();
}
}
class ClassExample {
private double mDouble;
public void CE_Print_mDouble() {
System.out.println(mDouble);
}
public void CE_Set_mDouble(double dInput) {
mDouble = dInput;
}
}
예제에서 메서드들은 public 형으로 선언되었으므로 외부에서 사용할 수 있습니다.
7, 8번째 줄을 보면 메소드를 사용했지만 코드 동작에 있어서 문제가 발생하지 않습니다. 또한 사용한 메소드들이 ClassExample 객체의 메소드이므로 메소드 내부에서 ClassExample의 mDouble 변수에 접근하더라도 오류 없이 변수 값을 출력하는 것을 볼 수 있습니다.
즉, private 및 public을 통해 외부에서 접근 가능한 멤버를 설정해 줄 수 있고, 이는 프로그래머로 하여금 정보 은닉의 효과 및 중요 정보의 보안성을 높여주는 방법으로 사용됩니다.
'비전공자의 개발과 친해지기 > 클래스와 객체' 카테고리의 다른 글
[JAVA : 클래스와 객체]6. 상속 (0) | 2022.06.08 |
---|---|
[JAVA : 클래스와 객체]5. static (0) | 2022.05.05 |
[JAVA : 클래스와 객체]3. 생성자(constructor) (1) | 2022.04.14 |
[JAVA : 클래스와 객체]2. 멤버 (0) | 2022.04.13 |
[JAVA : 클래스와 객체]1. 클래스와 객체 (0) | 2022.04.12 |