본문 바로가기
Java/Basic

접근제어자(Access Modifier)와 제어자(Modifier)

by 최로이 2021. 3. 26.

1. 접근제어자

멤버 또는 클래스에 사용되어, 해당하는 멤버나클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.

접근 제어자가 default임을 알리기 위행실제로 default를 붙이지는 않으며, 클래스나 멤버변수, 메소드, 생성자에 접근 제어자가 지정되어 있지 않다면, 접근 제어자가 defalut임을 의미한다.

 

**접근제어자는 오직 하나만 사용할 수 있으며, 위의 네 가지 종류중 하나만 사용할 수 있다.

 

접근제어자에 따른 접근 허용 범위

제어자 같은 클래스 같은 패키지 (다른 패키지)자식 클래스 전체
public O O O O
protected O O O  
(default) O O    
private O      

 

접근 범위가 넓은 것(왼쪽)부터 좁은 것(오른쪽)을 나열하면 다음과 같다.

public  >  protected  >  default  >  private

 

1.1 접근 제어자를 사용하는 이유

① 외부로부터 데이터를 보호하기 위해
② 외부에는 불필요한, 내부적으로만 사용되는 부분을 숨기기 위해
→ 캡슐화와 밀접한 관련이 있다.

 

접근 제어자를 이용한 예제

public class RunTime{
	public static void main(String[] args) {
		Time t = new Time(12, 35, 30);
		System.out.println(t);
//		t.hour = 13; //에러 발생: 변수 hour의 접근제어자가 private이기 때문에 접근할 수 없다.
		t.setHour(t.getHour()+1); //현재시간보다 1시간 후로 변경
		System.out.println(t);
		
	}
}

class Time {
	private int hour;
	private int minute;
	private int second;
	
	Time(int hour, int minute, int second){
		setHour(hour);
		setMinute(minute);
		setSecond(second);
	}

	public int getHour() {
		return hour;
	}

	public void setHour(int hour) {
		if (hour < 0 || hour > 23)
			return;
		this.hour = hour;
	}

	public int getMinute() {
		return minute;
	}

	public void setMinute(int minute) {
		if (minute < 0 || minute > 59)
			return;
		this.minute = minute;
	}

	public int getSecond() {
		return second;
	}

	public void setSecond(int second) {
		if (second < 0 || second > 59)
			return;
		this.second = second;
	}

	public String toString() {
		return hour + ":" + minute + ":" + second;
	}
}
-----------------------------
결과값
12:35:30
13:35:30

 

1.2 제어자를 사용할 수 있는 종류별 대상

대상 사용 가능한 제어자
클래스 public, protected, default, private(모든 접근 제어자)
메소드 모든 접근 제어자, final, static, abstract
멤버변수 모든 접근 제어자, final, static
지역변수 final

 

1) static : 클래스의, 공통적인

static 멤버변수 -모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다.
-클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다.
-클래스가 메모리에 로드될 때 생성된다.
메소드 -인스턴스를 생성하지 않고도 호출이 가능한 static 메소드가 된다.
-static 메소드 내에서는 인스턴스멤버들을 직접 사용할 수 없다.

 

2) final : 마지막의, 변경될 수 없는

final 클래스 변경될 수 없는 클래스로 확장될 수 없는 클래스가 된다. 그렇기 때문에 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.
메소드 변경될 수 없는 메소드로 final로 지정된 메소드는 오버라이딩을 통해 재정의 될 수 없다.
멤버변수 변수 앞에 final이 붙으면 값을 변경할 수 없는 상수가 된다.
이 때 상수는 대문자로 작성한다.
지역변수

 

3) abstract : 추상의 미완성의

abstract 클래스 클래스 내에 추상 메소드가 선언되어 있음을 의미한다.
메소드 선언부만 작성하고 구현부는 작성하지 않은 추상 메소드임을 알린다(객체 생성이 안 됨)

 

'Java > Basic' 카테고리의 다른 글

다형성(polymorphism) - instanceof 연산자  (0) 2021.03.31
다형성(polymorphism)  (0) 2021.03.30
오버로딩과 오버라이딩  (0) 2021.03.25
상속(Inheritance)  (0) 2021.03.24
변수의 초기화  (0) 2021.03.23

댓글