캡슐화는 관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하도록 은닉하는게 핵심입니다.
객체에 직접적인 접근을 막고 외부에서 내부의 정보에 직접접근하거나 변경할 수 없고, 객체가 제공하는 필드와 메소드를 통해서만 접근이 가능합니다.
캡슐화의 가장큰 장점은 정보은닉(Information Hiding)에 있습니다.
외부에서 객체접근하는데 있어서 정보를 숨기고 객체의 연산을 통해서만 접근이 가능하게 하는 것입니다.
정보은닉의 장점은 외부에서 특정 객체의 데이터 및 함수를 직접 접근을 막음으로써 변경을 못하게 하고 유지보수나 확장시 오류의 범위를 최소화 할 수 있고,
객체내 정보손상, 오용을 방지하고, 조작법이 바뀌어도 사용방법 자체는 바뀌지 않고, 데이터가 변경되어도 다른 객체에 영향을 주지 않기 때문에 독립성이 좋고,
처리된 결과사용으로 이식성이 좋고, 객체를 모듈화 할 수있어 새로운 시스템의 구성에 하나의 모듈처럼 사용이 가능하다.
★ 접근제어자
캡슐화를 하기 위해서는 접근제어자를 통해 설계가 잘 이루어져야 한다.
자신 내부의 모듈은 감추고, 다른 모듈의 내부 작업도 직접적으로 개입하지 못하도록 설계해야한다.
▷ 클래스 접근 제어자
default : 동일 패키지의 클래스(class)에만 인스턴스(객체)를 생성가능하다.
public : 다른 패키지에서 인스턴스(객체)를 생성가능하다.
▷ 메소드 접근 제어자
private : 동일한 클래스 안에서만 접근이 가능하고, this를 사용하는 것들은 외부에서 접근 불가능하고, 상속도 안된다.
default : 접근제어자가 없는 형태로 동일한 패키지 안에서만 접근이 가능하다.
protected : 동일한 패키지 안에서 사용가능하고, 다른 패키지라도 상속받은 클래스에는 접근이 가능하다.
public : 모든 객체에서 접근 가능하다.
★ setter와 getter
다음 예제를 통해서 캡슐화 과정을 살펴보자
public class member {
private String id;
private String pw;
private int age;
//getter
public String getId() {
return id;
}
public String getPw() {
return pw;
}
public int getAge() {
return age;
}
//setter
public void setId(String id) {
this.id = id;
}
public void setPw(String pw) {
this.pw = pw;
}
public void setAge(int age) {
this.age = age;
}
}
위의 예제는 일반적으로 회원관리시 회원정보를 캡슐화하여 회원정보를 은닉하여 보안을 높이는 효과가 있습니다.
member 클래스의 모든 변수는 private으로 접근제어자 선언을 해놓았기 때문에 member 클래스 내부에서만 접근이 가능합니다.
접근을 위해 setter와 getter 라는 장치를 만들어 내부에서 접근가능합니다.
입력할때는 set, 가져올때는 get을 사용하여 작동할 수 있음을 확인할 수 있습니다.
혹시 이해가 안되는 분을 위해서 쉽게 설명하겠습니다.
※ member 클래스 내부에 있는 변수들은 접근제어자가 private으로 선언이 되어있기 때문에 member 클래스 내부에서만 접금이 가능합니다.
☞ setter : member클래스내에 있는 변수(id)에 회원의 아이디값을 저장
public void setId(String id) {
this.id = id;
}
public : 어디서든 접근이 가능
void : 리턴값이 없음
setId : 메소드이름
String id : 입력된 매개변수
this.id : member 클래스 내에 있는 private String id
☞ getter : member클래스내에 있는 변수(id)에 저장되어 있는 회원의 아이디값을 리턴
public String getId() {
return id;
}
public : 어디서든 접근이 가능
String : 리턴값의 데이터타입
getId : 메소드이름
return : 리턴
id : member 클래스 내에 있는 private String id에 저장되어 있는 값
지금까지 캡슐화 및 정보은닉에 대해서 알아보았습니다.
이해가 안되시는 분들은 댓글 남겨주시면 아는 범위에서 최대한 알려드리도록 하겠습니다.
도움이 되셨다면 좋아요 부탁드립니다. 감사합니다.
'Language > Java' 카테고리의 다른 글
객체지향언어란? [특징, 장점, 단점, 종류] (0) | 2019.05.20 |
---|---|
프로그래밍언어 자바[Java]란 무엇인가? (0) | 2019.05.16 |