2016-03-18

10. java - 접근제어 지시자

객체지향 언어는 캡슐화가 중요!
캡슐화 : 관련있는 변수, 메소드를 하나의 클래스안에 묶는 것
            - 내부의 정보를 아무나 볼 수 없게 만든다.
              각 상황에 맞는 접근 허용 범위를 지정해야함.
         

접근 제어 지시자 


- 접근 허용범위  ... 클래스를 기준으로 결정













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
AAA는 디폴트로 선언된 클래스 이기 때문에 같은 패키지의 클래스만 AAA에 접근이 가능


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? - 변경 범위를 최소화 시키기 위해
           - 만들어놓은 클래스를 다른 곳에서도 이용이 가능하게 하기위해


댓글 없음 :

댓글 쓰기