[JAVA] 접근제한자(Public, Protected, Private, Default)

@욕심쟁이

·

2020. 8. 18. 12:49

반응형

접근제한자란?

 - 클래스 또는 인터페이스의 멤버에 접근을 제한하는 키워드 

 - 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근

 - 4가지(public, protected, (default), private) 로 구성되며
 - default 접근제한자는 별도의 키워드 없이 변수 또는 메서드 선언

 

  • public 접근제한자 : 단어 뜻 그대로 외부 클래스가 자유롭게 사용할 수 있도로 함
  • protected 접근제한자 : 같은 패키지 또는 자식클래스에서 사용할수 있도록 함
  • private 접근제한자 : 단어 듯 그대로 개인적인 것이라 외부에서 사용 될 수 없도록 함. 
  • (자신의 class에서만 사용가능 getter/setter를 사용하여 넣고 꺼내기 가능)
  •  
  •  
  • default 접근제한자 : 같은 패키지에 소속된 클래스 에서만 사용
  •                           (위세가지 접근제한자가 적용되지않으면 defualt접근제한을 가짐)
속성 설명
public 접근제한자 외부 클래스가 자유롭게 호출할 수 있도로 함
protected 접근제한자 같은 패키지 또는 자식클래스에서 호출 할 수 있도록 함
private 접근제한자 자신의 클래스에서만 접근 가능하도록 지정
(다른 클래스에서 접근 불가능하도록 지정)
default 접근제한자 

같은 패키지에 소속된 클래스에서만 사용(다른패키지X)
(위 세가지 접근제한자가 적용되지않으면 defualt접근제한을 가짐)

 - 주로, 클래스 내의 멤버변수는 private 접근제한자를 사용하여 외부에서 접근할 수 없도록

     (내부에서만 접근 가능하도록) 제한하고 public 으로 선언된 Getter/Setter 메서드를 통해

     간접적으로 멤버변수에 접근할 수 있도록 한다.

 - 객체지향 특징 중 E(Encapsulation, 캡슐화 = 은닉성)에 해당함 

접근제한이 강화

public < protected < default < private

 

1. 클래스의 접근제한

 - 클래스를 선언할때 해당 클래스의 같은 패키지 내에서만 사용할 것인지 아니면

   다른패키지에서도 사용할 수 있도록 할것인지 결정 

 - public, default 두가지 접근제한을 가짐

 

1) default 접근제한자 

   - 클래스 선언시 public을 생략했다면 클래스는 defult접근제한을 가짐

pakage p1
class A{} //한 패키지 클래스내에서 B에 A를 자져다 쓸수있지만 다른 패키지 클래스에선 사용안됨
class B{
	 A a;
}
pakage p2
class C{
	//A a;// 다른 패키지 내에서 사용 불가능
}

2) public 접근제한자 

   - 클래스 선언시 public 접근 제한자를 붙였다면 클래스는 public접근제한을 가짐

   - 한 패키지 내 뿐만 아니라 다른 패키지에서도 아무런 제한없이 사용가능

pakage p1
public class A{}
class B{
	A a;
}
pakage p2
class C{
	A a;// 다른 패키지 내에서도 사용가능
}

2.생성자의 접근제한

 -  객체를 생성하기 위해 new연산자로 생성자를 호출

 - 어디에서나 호출 가능X

 - 어떤 접근제한자를 갖느냐에 따라 호출여부 결정

 - public, protected, default, private 접근제한을 가짐

public class ClassName{
	public CalssN(){} //public 접근제한
    protected CalssN(){} //protected 접근제한
    CalssN(){} //defualt 접근제한
    private CalssN(){} //private접근제한
    
}

 

반응형

'IT > JAVA' 카테고리의 다른 글

[JAVA] 메서드 오버로딩 2탄  (0) 2020.08.19
[JAVA] 메서드 오버로딩 1탄  (0) 2020.08.19
[JAVA]멤버변수(필드)  (0) 2020.08.12
[JAVA] 객체지향프로그래밍(OOP) 2  (0) 2020.08.12
[JAVA] 객체지향프로그래밍(OOP) 1  (0) 2020.08.12