프로그래밍/Java

10. [Java] 접근제어자란 무엇인가 - 코딩도치

코딩도치 2020. 1. 8. 19:00
반응형

안녕하세요. 코딩도치 입니다~

 

오늘은 접근제어자에 대해서 알아보도록 하겠습니다!

 

1. 접근제어자란

 

접근제어자는 변수, 함수, 클래스 등을 선언할 때 사용됩니다.

 

접근제어자란 말 그대로 해당 변수나 함수 등에 대한 사용자의 접근을 제한하는 역할을 합니다.

 

접근 제한을 통해서 해당 정보를 외부로부터 보호하는 것입니다.

 

Java에는 4가지 접근제어자가 있습니다.

 

- public  : 접근에 제한이 없음

- protected : 동일한 패키지 내에 있거나, 파생 클래스의 경우 접근 가능

- default : 아무런 접근제어자를 명시하지 않았을 경우 할당되는 제어자이며, 동일한 패키지 내에서만 접근 가능

- private : 자기 자신의 클래스 내에서만 접근 가능

 

private -> default -> protected -> public 순으로 보다 많은 접근을 허용합니다.

 

직접 코딩을 통해서 각각의 접근제어자가 어떻게 동작하는지 알아볼까요?

 

2. 실습

 

먼저, Person 클래스에 각각의 접근제어자를 사용한 변수를 선언해주었습니다.

이제 Main 클래스에서 Person 객체를 생성하여 각각의 변수에 접근해보도록 하겠습니다.

 

(객체 . 변수(함수)와 같은 형태로 객체의 변수나 함수에 접근할 수 있습니다!) 

위와 같이 각각의 변수에 접근을 시도했더니 공포의 x박스를 만날 수 있었습니다.

 

해당 변수들에 접근할 수 없다는 것이죠.

 

Person 클래스에서 public으로 선언한 name 변수에만 빨간 줄이 없네요.

 

이처럼 Main 클래스의 경우, Person 클래스와 패키지도 다르기 때문에

 

public으로 선언된 name변수에만 접근할 수 있는 것입니다.

 

그렇다면 같은 패키지에 있는 다른 클래스에서는 어떨까요?

 

Person 클래스가 있는 패키지에 새로운 PersonList 클래스를 추가해서 확인해보도록 하겠습니다.

Main 클래스에서와 동일하게 Person객체를 하나 생성하고 각각의 변수에 접근해 보았습니다.

 

protected와 default로 선언된 age와 birthday 변수에서 빨간줄이 사라졌습니다.

 

protected와 default 변수는 동일한 패키지 내에서 접근이 가능한 것을 확인할 수 있었습니다.

 

그러면 protected와 default의 차이는 무엇일까요?

 

바로 protected 변수는 파생 클래스에서도 접근이 가능하다는 것인데요.

 

이것을 확인해보기 위해서는 상속(Inheritance)을 이용한 클래스의 생성이 필요합니다.

 

상속에 대한 개념은 다음 시간에 알려드릴 테니 일단 보고 따라와 주세요!

 

Person 클래스와 다른 패키지에 새로운 MainPerson 클래스를 추가하고 Person 클래스를 상속해보도록 하겠습니다.

위와 같이 클래스 선언 뒤에 (extends 상속할 클래스명)을 입력해 줌으로써 해당 클래스를 상속할 수 있습니다.

 

상속을 하게 되면 상속하는 클래스에 있는 변수나 함수를 사용할 수 있게 됩니다.

 

그래서 MainPerson 클래스에서는 name, age, birthday, weight의 변수를 선언하는 부분이 없음에도 불구하고,

 

해당 변수들을 사용할 수 있는 것입니다(Person 클래스에 선언되어 있기 때문에).

 

여기서 protected와 default의 차이가 나타나게 됩니다.

 

protected로 선언된 age변수는 MainPerson 클래스에서 접근할 수 있지만, default 변수는 접근할 수 없습니다.

 

private 변수는 외부에서는 어디서도 접근할 수 없습니다.

위와 같이 변수가 선언되어 있는 클래스 내에서만 사용할 수 있는 것입니다.

 

이렇게 각각의 접근제어자가 어떻게 동작하는지 직접 알아보았는데요.

 

데이터의 보호를 위해서 접근제어자의 적절한 사용이 꼭 필요합니다!

 

어떠한 고정값을 사용자가 함부로 접근하여 바꿀 수 있다면 문제가 발생할 수 있겠죠?

 

다음 시간에는 이렇게 외부에서 접근할 수 없는 데이터(private)에

 

접근할 수 있는 방법(getter, setter)에 대해서 알아보도록 하겠습니다~

 

감사합니다.

반응형