Encapsulation
외부에서 변수에 직접 접근하는 것을 막아 데이터를 보호한다.
방법
1. private
class Bank{
private String name;
private String account;
}
public class Encapsulation {
public static void main(String[] args) {
Bank bank1=new Bank();
back1.name="신한";
}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
back1 cannot be resolved to a variable
- private은 해당 클래스 내부에서만 접근 가능하기 때문에 위처럼 외부에서의 접근을 막는다.
2. 메서드
class Bank{
private String name;
private String account;
public String getName() {
return name;
}
public void setName(String name) {
if (name==null) {
System.out.println("name은 null일 수 없습니다.");
return;
}
this.name = name;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
if (account==null) {
System.out.println("account는 null일 수 없습니다.");
return;
}
if (account.length()!=13) {
System.out.println("account는 13자리이어야 합니다.");
return;
}
this.account = account;
}
}
public class Encapsulation {
public static void main(String[] args) {
Bank bank1=new Bank();
bank1.setName("신한은행");
bank1.setAccount("1442323111");
System.out.println(bank1.getName());
System.out.print(bank1.getAccount());
}
}
신한은행
1442323111
- 변수에 접근을 위한 용도로 메서드를 만들어 private에 접근 가능하도록 한다.
- 세터 메서드에 추가적인 로직을 추가하여 변수에 대한 보안을 강화한다.
3. Singleton
class Bank{
private static Bank instance=new Bank();
private Bank() {
}
public static Bank getInstance() {
return Bank.instance;
}
public void sayName() {
System.out.println("신한은행");
}
}
public class Encapsulation {
public static void main(String[] args) {
Bank bank=Bank.getInstance();
bank.sayName();
}
}
신한은행
- 여러 개의 객체가 필요 없는 경우(수정 가능한 변수가 없고 기능만 있는 경우==stateless),객체의 재사용이 유리한 경우 사용한다.
- 외부에서 생성자 접근 금지(1)
- 내부에서 직접 객체 생성(2)
- 외부에서 객체접근이 가능한 메서드 생성+객체생성 없이 접근할 수 있도록 static설정(3)