본문 바로가기
Programing/JAVA (& 혼공자Java)

자바(Java) - 패키지와 접근 제한자2 (접근 제한자)

by a.k.a DUKI 2020. 10. 20.
728x90
반응형

접근 제한자

클래스와 인터페이스 및 다른 패키지에서 사용하지 못하도록 접근 제한하여 접근 제한자를 사용한다.

 

접근 제한자 종류

  • pulbic 접근 제한자: 외부 클래스가 자유롭게 사용할 수 있도록 함

  • protected 접근 제한자: 같은 패키지 또는 자식 클래스에서 사용할 수 있도록함

  • private 접근 제한자: 외부에서 사용할 수 없도록 함

  • default 접근 제한자: 같은 패키지에 소속된 클래스에서만 사용할 수 있도록 함

혼공자 유툽 참고

 

클래스 접근 제한

같은 패키지 내에서만 사용할 것인지 다른 패키지 내에서도 사용할 수 있도록 할 것인지 결정한다.

//default 접근 제한
class 클래스 { ... }

//pulbic 접근 제한
public class 클래스 { ... }

default 접근 제한

클래스 선언시 public을 생략하면 클래스는 default접근 제한을 가진다. 

default 접근제한은 같은 패키지에서 아무런 제한 없이 사용할 수 있지만, 다른 패키지에서는 사용할 수 없다.

혼공자 유툽 참고

public 접근 제한

같은 패키지 뿐만 아니라, 다른 패키지에서도 아무런 제한 없이 사용할 수 있다.

혼공자 유툽 참고

 

생성자 접근 제한

public clas ClassName{
	//publice 접근 제한
    public ClassName(...) { ... }
    
    //protected 접근 제한
    protected ClassName(...) { ... }
    
    //default 접근 제한
    ClassName(...) { ... }
    
    //private 접근 제한
    private ClassName(...) { ... }
}    

 

예시1) 생성자 접근 제한

public class A {
	//필드
    A a1 = new A(true);
    A a2 = new A(1);
    A a3 = new A("문자열);
    
    //생성자
    public A(boolean b) { }  //public 접근 제한
    A(int b) { }             //default 접근 제한
    private A(String s) { }  //private 접근 제한
}

 

 

필드와 메소드의 접근 제한

//필드 선언
[public | protected | private] [static] 타입 필드;

//메소드 선언
[public | protected | private] [static] 리턴 타입 메소드(...) {...};

 

예시2) 필드와 메소드 접근 제한 1

package sec06.exam05.package1;

public class A {
	// 핃드
	public int field1;		//public 접근 제한자
	int field2;				//deault 접근 제한자
	private int field3;		//private 접근 제한자

	// 생성자
	public A() {
		//클래스 내부일 경우 필드와 메소드 
		// 모두 접근제한자의 영향을 받지 않음
		field1 = 1;
		field2 = 1;
		field3 = 1;

		method1();
		method2();
		method3();
	}

	public void method1() {	   } 	//public 접근 제한자

	void method2() {	}			//deault 접근 제한자

	private void method3() {	}	//private 접근 제한자
}

예시2) 필드와 메소드 접근 제한 2

 

package sec06.exam05.package1;	//A클래스와 패키지 동일

public class B {
	public B() {
		A a = new A();
		a.field1 = 1;
		a.field2 = 1;
		//private 필드 접근 불가 
		//a.field3 = 1; //컴파일 에러가 생김
		
		a.method1();
		a.method2();
		//private 메소드 접근 불가 
		//a.method3();	//컴파일 에러가 생김
		
	}
}

예시2) 필드와 메소드 접근 제한 3

package sec06.exam05.package2; //패키지가 다름

import sec06.exam05.package1.A;

public class C {
	public C() {
		A a = new A();
		a.field1 = 1;
		//default 필드 접근 불가
		//a.field2 = 1;	//컴파일 에러가 생김
		//private 필드 접근 불가
		//a.field3 = 1;	//컴파일 에러가 생김
		
		
		a.method1();
		//default 메소드 접근 불가 
		//a.method2();	//컴파일 에러가 생김
		//private 메소드 접근 불가 
		//a.method3();	//컴파일 에러가 생김
	}
}

 

 

 

 


※용어 정리

  • 접근 제한자: 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막아야 하는 경우, 객체 생성을 막기위해 생성자를 호출하지 못하게 하거나 필드나 메소드를 사용하지 못하도록 막아야되는 경우에 사용

접근 제한 적용 대상 접근할 수 없는 클래스
public 클래스,필드,생성자,메소드 없음
protected 필드,생성자,메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 클래스,필드,생성자,메소드 다른 패키지에 소속된 클래스
private 필드,생성자,메소드 모든 외부 클래스

 

 

 

 

본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.

 

728x90
반응형

댓글