정보 은닉(Information Hiding)
- 객체 내부의 정보(=필드)를 다른 객체에게 보여주지 않고 숨기는 것
- 객체 외부에서는 객체 내부 정보를 직접 접근하거나 조작하는 것이 불가능함
- 객체의 정보는 필드에 저장하기 때문에 정보 은닉의 실제 의미는 필드 값을 숨기는 것을 의미
- 필드에 직접 접근하는 대신 객체 외부에서 필드에 접근할 수 있도록 별도의 메소드를 구현함
- 자바는 4가지 접근 제어자(Access Modifier)를 통해서 정보 은닉을 구현
접근 제어자(Access Modifier)
public
- 누구나 접근할 수 있는 권한
- 일반적으로 메소드가 public 권한을 가짐
private
- 같은 패키지면 클래스가 달라도 접근할 수 있는 권한
- 일반적으로 필드가 private 권한을 가짐
default
- 같은 패키지면 클래스가 달라도 접근할 수 있는 권한
- 접근 제어자를 생략하면 default로 동작
protected
- 같은 패키지 또는 자식 클래스에서만 접근할 수 있는 권한
- 다른 패키지에 있더라도 자식 클래스는 접근 가능
User 클래스 (메인메소드 없음)
// 필드는 private이다. private String id; private String password; private String email; private int point; private boolean isVip;
// 메소드는 public이다. public String getId() { return id; } public void setId(String pId) { id = pId; } public String getPassword() { return password; } public void setPassword(String pPassword) { password = pPassword; } public String getEmail() { return email; } public void setEmail(String pEmail) { email = pEmail; } public int getPoint() { return point; } public void setPoint(int pPoint) { point = pPoint; setVip(point >= 10000); } public boolean getVip() { return isVip; } private void setVip(boolean pVip) { isVip = pVip; }
UserMain 클래스 (메인메소드 설정)
User user = new User(); user.setId("admin"); System.out.println(user.getId()); user.setPassword("123456"); System.out.println(user.getPassword()); user.setEmail("admin@web.com"); System.out.println(user.getEmail()); user.setPoint(1000); System.out.println(user.getPoint()); System.out.println(user.getVip());
출력:
admin
123456
admin@web.com
1000
false