캡슐화 : 관련있는 변수, 메소드를 하나의 클래스안에 묶는 것
- 내부의 정보를 아무나 볼 수 없게 만든다.
각 상황에 맞는 접근 허용 범위를 지정해야함.
접근 제어 지시자
- 접근 허용범위 ... 클래스를 기준으로 결정
1) private : 클래스 내부 멤버끼리만 접근이 가능
ex)
class AAA
{
private count;
...
}
class BBB
{
public void countAAA(AAA a)
{
a.count = 2;
}
}
|
클래스 BBB의 countAAA메소드에서 AAA클래스의 변수에 접근하지 못함.
접근하려는 변수가 private 로 선언되었기 때문에 외부의 클래스는 접근이 허용되지 않음
2) default
ex)
package fruit;
class AAA
{
...
}
//다른 패키지
package animal;
class BBB
{
public void create()
{
fruit.AAA a = new fruit.AAA();
}
}
| cs |
3) protected
ex)
class AAA
{
protected int num;
}
class BBB extends AAA
{
public void countAAA(int n)
{
num = n;
}
}
|
BBB는 AAA를 상속받음, AAA내의 num변수는 protected로 지정
-- BBB에서 AAA의 num에 접근이 가능
4) public
ex)
//각각 따로 존재하는 파일
package fruit;
public class AAA
{
...
}
package animal;
public class BBB
{
public void create()
{
fruit.AAA a = new fruit.AAA();
}
}
|
AAA클래스가 public으로 지정되어 있기 때문에 외부 클래스가 접근이 가능.
*클래스를 public으로 선언 시 주의
- 하나의 소스 파일에는 하나의 public클래스만 존재
- public 클래스와 해당 소스 파일의 이름은 일치해야 함
* 자동으로 생성되는 디폴트 생성자의 경우
~ 해당 클래스의 접근제어 지시자에 따라 default인지 public인지 달라진다.
* 모든 기능을 하나의 클래스에 넣기 보다는 작게 디자인한다.
why? - 변경 범위를 최소화 시키기 위해
- 만들어놓은 클래스를 다른 곳에서도 이용이 가능하게 하기위해
댓글 없음 :
댓글 쓰기