Day14 - 접근 제한자

2021. 3. 5. 14:59JAVA 공부

오늘은 비대면 수업인 날 금요일 입니다 ~

번갈아 가면서 학원에 나가기 때문에, 오늘은 집에서 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