2021. 3. 5. 14:59ㆍJAVA 공부
오늘은 비대면 수업인 날 금요일 입니다 ~
번갈아 가면서 학원에 나가기 때문에, 오늘은 집에서 Zoom 회의를 통해 수업을 들어요 ~
오늘만 지나면 주말 입니다 ~
이번에는 접근 제한자에 대해 알아 봅시다
접근 제한자
은행에 금고와 창구가 있다고 가정을 해봅시다.
은행의 고객들(모든 사람)은 은행에 방문을 해서 창구에서 볼일을 봅니다. 이 고객들은 금고에 들어갈 수 있나요? 없겠죠
금고에는 은행원들만 들어갈 수 있겠죠?
이러한 기능을 구현하기 위해서 접근 제한자가 있는 겁니다.
먼저 종류를 봅시다
1. public : 어디서나 접근 가능
2. protected : 같은 클래스, 같은 패키지 접근 가능 ( 다른 패키지일 경우 상속을 통해 접근 가능 )
3. default : 같은 클래스, 같은 패키지 접근 가능 ( 다른 패키지일 경우 접근 불가 )
4. private : 같은 클래스 내부에서만 접근 가능
이렇게 총 4개가 있습니다.
이 중에 public 과 private 기능을 가장 많이 사용한다고 합니다.
그러면 하나씩 알아 봅시다
클래스 접근제한자는 public 과 default 2개 뿐입니다
public
★ public 은 어디서나 접근이 가능 ★
사실 public 는 이미 저희가 사용하고 있었습니다. 바로 class 를 만들면 앞에 붙어 있었습니다.
default 와 같이 한번 알아 봅시다
default
default 는 접근 제한자를 붙이지 않은 상태로 , 같은 패키지에서만 접근 할 수 있습니다.
확인을 위해서 패키지와 클래스들을 만들어 주세요
class 앞에 있는 public 을 지워주고 아무것도 쓰지 않으면 default 가 생략되어 있는 겁니다.
이 A 클래스는 같은 패키지에 있는 B 클래스에서 사용이 가능합니다. 확인을 해보죠
그런데 패키지가 다른 C 클래스에서는 A 클래스를 사용할 수 없습니다.
A 클래스를 쓰기 위해서, import 를 하려고 해도 B 클래스 밖에 안뜨죠?
그래서 이렇게 default 인 A는 다른 패키지에 있는 C에서는 사용할 수 없고, public 인 B 는 사용할 수 있는 겁니다
private
★ private 는 같은 클래스에서만 접근이 가능합니다. ★
이번에도 패키지와 클래스들을 만들어 줄게요
A 클래스 부터 봅시다
※ 실제로 A 클래스 내에서 A 객체를 만들면 메인에서 사용할 경우 무한루프가 되서 오류가 납니다.
생성자를 3개 만들어 줬어요. public , default, private
이렇게 만든 A 클래스를 B 클래스에서 사용해 봅시다
각각의 A클래스의 객체를 만들면서 생성자를 호출하는데, private 생성자만 오류가 뜨는걸 확인 할 수 있습니다.
이번에는 다른 패키지에 있는 C 클래스에서 사용해 보죠
C 클래스에서는 public 생성자만 사용이 가능하고 default와 private 생성자는 사용이 불가능하네요
private는 같은 클래스에서만 !
default는 같은 패키지에서만 !
암기 합시다
protected
protected 는 default 랑 같은데, 다른 패키지에서는 상속을 받으면 사용할 수 있다 라고 생각하시면 됩니다.
먼저 패키지랑 클래스를 만들어 줍시다.
A 클래스의 멤버변수 bool , 생성자 A(), 메서드 method() 에 protected가 붙었습니다.
같은 패키지에 있는 B 클래스에서 사용을 해보죠
사용하는데 아무런 문제가 없죠?
다른 패키지에 있는 C 클래스에서 사용을 해봅시다
default 랑 똑같죠? 다른 패키지에서는 사용이 안됩니다.
그런데, 다른게 1개 있어요. 바로 상속을 받으면 사용이 가능하다는 점.
다른 패키지에 있는 D 클래스에 상속을 받아 사용해 봅시다.
부모 클래스를 지칭하는 애가 있죠? super
그렇습니다. super를 이용해서 접근 밑 사용 하면 됩니다 ~
그냥 A a = new A() 안되냐구요? 안됩니다
이렇게 super 를 이용해서 protected 된 멤버변수, 생성자, 메서드를 사용할 수 있는데, super 를 사용해보시면 최상위 클래스 Object 에 protected 되어 있는 것도 확인이 되실 겁니다.
보시면 앞에 노란색 다이아몬드(?) 가 바로 protected 된 것들입니다.
이렇게 접근 제한자에 대해 알아 보았는데요
접근 제한자는 접근 제어자 라고도 부릅니다.
고생하셨습니다
'JAVA 공부' 카테고리의 다른 글
Day14 - 클래스 내에서 객체 만들기 (0) | 2021.03.06 |
---|---|
Day14 - 캡슐화, 정보 은닉 / setter , getter (0) | 2021.03.06 |
Day13 - super (0) | 2021.03.04 |
Day13 - this (0) | 2021.03.04 |
Day13 - 오버로딩 (0) | 2021.03.04 |