접근 제어자는 다른 클래스에서 해당 자원을 사용하려고 할 때
허용하는 범위를 설정하는 것을 의미합니다.
접근제어자의 종류로는 public, protected, default, private 가 있습니다.
종류 | 설명 |
public | 다른 패키지에서도 자유롭게 접근할 수 있는 자원 |
protected | 다른 패키지에서는 상속받은 클래스에서만 접근할 수 있는 자원 |
default | 같은 패키지에서는 자유롭게 접근할 수 있는 자원 (앞에 접근제어자를 붙이지 않은 것) |
private | 같은 클래스 내부에서만 접근할 수 있는 자원 |
집합의 개념으로 볼 때 public 이 제일 넓은 범위를 포함시키고 있고,
private 가 가장 적은 범위를 가지고 있는 것을 알 수 있습니다.
보통 저희가 클래스를 만들면 public class ~ 로 만들게 되는데요,
클래스에는 파일명과 같은 이름의 클래스만이 유일한 public class가 될 수 있습니다.
클래스에는 보통 public 아니면 default 클래스만이 사용이 됩니다.
public한 클래스를 작성하면 이 클래스는 다른 패키지에서도 가져다 쓸 수 있는데요,
public 을 붙이지 않은 클래스는 동일한 패키지 내의 정의된 클래스만 사용이 가능합니다.
다른 패키지에서는 사용할 수 없습니다.
protected 나 private 접근제어자를 붙인 클래스는 선언 자체가 불가능합니다.
예제를 설명하기 위한 코드를 먼저 보여드리겠습니다.
우선 패키지는 서로 다른 패키지의 클래스들인데요,
클래스명 : myobj.C09_PublicClass => myobj 패키지의 C09_PublicClass
클래스명 : C09_PublicClass => default 패키지의 C09_PublicClass
클래스명 : C09_AccessModifier => default 패키지 인 것을 미리 말씀드립니다.
저는 public 한 클래스와 일반 default 한 클래스를 하나씩 만들어줬습니다.
내용은 그냥 숫자를 출력하는 메서드 m1, m2, m3, m4 로 작성했습니다.
default 패키지의 C09_AccessModifier 에서는 myobj 패키지의 C09_PublicClass 클래스를 상속받아 보겠습니다.
상속을 받아, super 키워드를 사용해 부모클래스의 메서드를 사용하려고 했더니
m3 메서드와 m4 메서드는 생성이 불가능 한 것을 알 수 있습니다.
다른패키지의 자원이기 때문에 상속을 받았을 때 protected 범위까지 사용할 수 있습니다.
기본적으로 상속을 받지 않았을 땐 public 접근 제어자의 범위의 기능들만 사용할 수 있습니다.
이번에는 같은 패키지의 C09_PublicClass 의 인스턴스를 생성해보았는데요,
m4 메서드는 private 한 자원이기 때문에 이 인스턴스의 해당하는 메서드는 사용할 수가 없고,
그 외 public, protected, default 까지 자원을 사용할 수 있는 것을 알 수 있습니다.
private 는 직접 접근은 안되지만 다른 메서드를 통해서 간접적으로 이용은 할 수 있습니다.
다른 패키지에 있는 클래스의 자원은 기본적으로 public이 붙은 것만 사용할 수 있습니다.
'Java (국비지원 당시 공부했던 글) > OOP (Java)' 카테고리의 다른 글
[자바] OOP - 6. toString() (0) | 2022.06.03 |
---|---|
[자바] OOP - 5. 상속 (객체의 다형성과 캐스팅) (0) | 2022.05.30 |
[자바] OOP - 4. 상속 (상속 개념과 super, 오버라이드) (0) | 2022.05.27 |
[자바] OOP - 3. static과 변수 선언위치, 생성시기 (0) | 2022.05.16 |
[자바] OOP - 2. 클래스의 생성자와 오버로딩 (0) | 2022.05.16 |