자바 캡슐화
캡슐화
캡슐화 의 의미는 "민감한" 데이터가 사용자에게 숨겨져 있는지 확인하는 것입니다. 이를 달성하려면 다음을 수행해야 합니다.
- 클래스 변수/속성 선언
private
-
변수 값에 액세스하고 업데이트하기 위한 공개 get
및 set 메소드 제공
private
가져오기 및 설정
private
이전 장에서 변수는 동일한 클래스 내에서만 액세스할 수 있음 을 배웠습니다 (외부 클래스에서는 액세스할 수 없음). 그러나 공개 get 및 set 메서드 를 제공하면 액세스할 수 있습니다 .
메서드 는 get
변수 값을 반환하고 set
메서드는 값을 설정합니다.
둘 다의 구문은 get
또는 set
로 시작하고 그 뒤에 변수 이름이 오고 첫 글자는 대문자로 표시됩니다.
예시
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
설명된 예
이 get
메서드는 변수의 값을 반환합니다 name
.
이 set
메서드는 매개변수( newName
)를 가져와 변수에 할당합니다
name
. this
키워드는 현재 개체를 참조하는 데 사용됩니다 .
그러나 name
변수가 로 선언 되었으므로 이 클래스 외부에서 액세스할 private
수
없습니다 .
예시
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
변수가 로 선언된 public
경우 다음 출력이 예상됩니다.
John
private
그러나 변수 에 액세스하려고 하면 오류가 발생합니다.
MyClass.java:4: error: name has private access in Person
myObj.name = "John";
^
MyClass.java:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors
대신 getName()
및 setName()
메서드를 사용하여 변수에 액세스하고 업데이트합니다.
예시
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.setName("John"); // Set the value of the name variable to "John"
System.out.println(myObj.getName());
}
}
// Outputs "John"
왜 캡슐화인가?
- 클래스 속성 및 메서드에 대한 더 나은 제어
- 클래스 속성은 읽기 전용 (메소드만 사용하는 경우
get
) 또는 쓰기 전용 (set
메소드 만 사용하는 경우)으로 설정할 수 있습니다. - 유연성: 프로그래머는 다른 부분에 영향을 주지 않고 코드의 한 부분을 변경할 수 있습니다.
- 데이터 보안 강화