접근 제어자

nayoon·2021년 11월 11일
0

CS 공부

목록 보기
2/4

✍ 정의

정보은닉을 위해 사용한다.

정보은닉은 캡슐화의 중요한 목적 중 하나로 데이터를 보호하기 위해서 접근을 제어한다.

접근 제어자 종류: private, default, protected, public


✍ 종류

private

  • 자기 자신 클래스 내에서만 접근 가능

default

  • 아무런 접근 제한자를 명시하지 않으면 default값으로 자동 할당된다.
  • 동일한 패키지 내에 존재할 때

protected

  • 동일한 패키지 내에 존재할 때
  • 파생 클래스일 경우(다른 패키지에 있어도 접근이 가능하다)

public

  • 접근을 제한하지 않는다.

범위

public으로 갈수록 접근을 제한하지 않는다.

private < default < protected < public

✍ 사용 가능 대상

대상접근 제어자
클래스public, default
멤버 변수public, protected, default, private
메소드public, protected, default, private
지역 변수없음

default 관련 예제

default로 설정한 클래스를 다른 패키지에서 사용하려고 하면 not visible하다고 나온다.

// com.yoon package에 있는 Bye
package com.yoon;

class Bye {
	public String hello;
	
	public void printHello() {
		System.out.println(hello);
	}
}

// default package에 있는 Hello
import com.yoon.*;

public class Hello {
	public static void main(String[] args) {
		Bye bye = new Bye();
        	// -> error
        	// The type Bye is not visible
	}
}

protected 관련 예제

하위 클래스일 경우 다른 패키지더라도 멤버변수나 메소드를 사용할 수 있다.

// com.yoon 패키지에 있는 One
package com.yoon;

public class One {
	protected String name;
	protected String getName() {
		return name;
	}
	protected void setName(String name) {
		this.name = name;
	}
}


// com.nayoon 패키지에 있는 Main
package com.nayoon;

import com.yoon.One;

public class Main {
	public static void main(String[] args) {
		One one = new One();
		
		one.setName("jiyoon");
		System.out.println(one.getName());
	}
}



// com.nayoon 패키지에 있는 Main
package com.nayoon;

import com.yoon.One;

public class Main extends One{
	public static void main(String[] args) {
		Main main = new Main();
		
		main.setName("yoon");
		System.out.println(main.getName());
	}
}
profile
뚜벅뚜벅 열심히 공부하는 개발자

0개의 댓글