본문 바로가기

Java/기본

[Java] 객체지향 - 접근제한자(Access Modifier)

클래스는 필드(field), 메소드(method[=function]), 생성자(constructor)로 구성된다.

클래스를 설계할 떄에는 각 구성요소가 외부에서 접근하는 것을 허용할 것인지 염두에 두어야 한다.

자바에느 접근제한자를 이용해 특정요소에 접근할 수 없도록 하는 기능이 있다.

 

 

접근제한자 특성 비유
public -다른 패키지에 속한 클래스도 접근할 수 있음
-다른 클래스 및 패키지에서 접근할 필요가 있는
  필드, 메소드, 생성자의 경우 앞에 public 을 붙인다.
-다른 클래스에서 두루 사용되어야 하는 메서드가 포함된 경우
  public 을 명시적으로 붙여야 외부에서 접근할 수 있다.
주변 이웃들
protected 같은 패키지에 속하거나 상속받은 클래스 가족 구성원 + 친척들
default -앞에 아무런 접근제한자가 없는 경우 default 접근제한이 자동으로 적용된다.
-같은 패키지(package)에 속한 클래스만 접근할 수 있고
  다른 패키지에서는 접근할 수 없다.
한 집(패키지)에 사는
가족구성원
private 해당 클래스에서만 접근 가능
  (getter(), setter() 가 제공되어 간접적으로
  접근하는 방법 외에는 외부 클래스는 직접 접근 불가)
나만 들어올 수 있는 방

 

getter() & setter()

원칙적으로 객체지향언어는 객체의 외부에서 직접 접근해 값을 변경하는 것을 제한한다. 하지만 외부에서 값을 받아오거나(get) 값을 설정할(set) 필요가 있다. 이를 위해 getter(), setter() 메소드가 제공된다.

이때 보통 getter(), setter()는 public 으로 제공되어 외부에서의 접근을 허용한다.

 

외부에서 값을 읽기만 가능하고 새로 설정하지는 못하도록 하고 싶을때는 getter()만 정의하고

외부에서 값을 읽기뿐만 아니라 새로운 값을 설정하는 것도 가능하게 하고 싶을때는 getter(), setter() 둘다 정의한다

 

 

아래 코드의 경우 setAge() 메소드를 외부로 제공하여 age를 변경할 수 있도록 한다.

하지만 age 인자값이 1보다 작은 경우를 거르기 때문에 변경된 age가 1미만이 될 수 없도록 제한하는 역할도 수행한다.

public int setAge(int age){
	if(age < 1){
		this.age = 1;
	} else{
		this.age = age;
	}
	return age;
}