Encapsulation

codakcodak·2023년 7월 20일
0

Java

목록 보기
10/17
post-thumbnail

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="신한"; //private을 통해 Bank내부에서만 접근 가능하도록 하여 변경이 불가능하다.
	}
}
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{
	//(2)
	private static Bank instance=new Bank();
	//(1)
	private Bank() {
	}
	//(3)
	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)
profile
숲을 보는 코더

0개의 댓글