TIL
Java - 클래스, 캡슐화
Paragon53
2025. 2. 26. 18:51
클래스의 중요한 기능은 캡슐화, 상속, 추상화, 다양화가 있다.
캡슐화!
외부에서 수정하기위해 절대로 접근하면 안되는 것을 보호하는 개념이다.
이 클래스 혹은 객체의 캡슐화는 접근 제어자를 통해서 구현이 가능하다.
접근 제어자
클래스, 변수,매서드, 생성자의 접근 범위를 제한하는 키워드다.
캡슐화 구현을 위해 사용된다.
★ USB예제에서 접근하면 안되는 것이 무엇이 있을까?
- 용량
- 사용중인 용량
- 남은 용량
- 제조사
- 보안키
위의 5개는 외부에서 직접 수정할 수 있는 권한을 주면 안된다.
String type = "Local Disk";
String systemName = "NTFS";
private String brand; // 브랜드 (예: 삼성, 샌디스크)
String version; // USB 버전 (예: 2.0, 3.0)
private int capacity; // 용량 (예: 16GB, 32GB)
private int usedCapacity; //사용중인 용량
private int freeCapacity; // 남은 용량
private int securityKey;
하지만 외부 장치에서 인식하기 위해 주어야 한다. Private에 감싸진 데이터는 인스턴스화 되어도 읽을 수 없다.
=> 그 중요 사항을 읽을수 있게 해주는 매서드가 바로 getter와 setter를 쓰자!
★ 정보를 읽을 수있게 getter
public int getCapacity() {
return capacity;
}
public int getUsedCapacity() {
return usedCapacity;
}
public int getFreeCapacity() {
return freeCapacity;
}
public String getBrand() {
return brand;
}
package chapter2.usbexample;
public class Main {
public static void main(String[] args) {
Usb usb = new Usb();
//접근은 불가능하지만 읽을수 있다.
usb.getBrand();
usb.capacity();
usb.getUsedCapacity();
usb.getFreeCapacity();
}
}
이러면 직접데이터를 수정할 권리를 주지 않고도 외부에 정보를 줄수 있다.
★ 정보를 수정(?) 할 수있는 setter
public void setUnlock(String key){
if(key.equals(securityKey)){
System.out.println("인증 되었습니다.");
}
else
{
System.out.println("틀렸다. 다시!");
}
}
setter는 데이터를 수정한느 매서드이지만, 보안과 관련된 중요한 것은 입력 받는 것 처럼 사용한다.
입력된 문자열과 저장한 key값이 맞으면 USB 보안해제를 하도록하면 된다.
package chapter2.usbexample;
public class Main {
public static void main(String[] args) {
Usb usb1 = new Usb("삼성", 16, "USB 3.0");
Usb usb2 = new Usb("샌디스크", 16, "USB 2.0");
System.out.println("제조사 " + usb1.getBrand());
System.out.println("전체 공간 " + usb1.getCapacity() +" GB");
System.out.println("사용 중 공간 " + usb1.getUsedCapacity());
System.out.println("빈 공간 " + usb1.getFreeCapacity());
}
}
다음글에서는 보안기능을 별도 클래스에서 상속 받아서 진행하겠다.