본문 바로가기

PL(ProgrammingLanguage)/JAVA

접근제한자

클래스는  필드와 메소드를 가진다. 

필드와 메소드를 가진다해서 아무것이나 가지고 있으면 안된다.

수학과 관련된 클래스라면 그와 관련된 것을 가지고 있어야할 것이고,

날짜와 관련된 클래스라면 날짜와 관련된 속성이나 메서드를 가지고 있어야할 것이다.

이런 특징을 캡슐화라한다.

캡슐화: 관련된 것을 잘 모아서 가지고 있는 것을 의미한다.

 

 

접근제한자

접근 제한자란 클래스 내에서 멤버의 접근을 제한하는 역할

  


접근제한자의 종류

  • public : 어떤 클래스든 접근할 수 있다는 것을 의미
  • protected : 자기 자신, 같은 패키지, 서로 다른 패키지다 하더라도 상속받은 자식 클래스에서는 접근할수 있다는 것을 의미
  • private : 자기 자신만 접근할 수 있다는 것을 의미
  • 접근제한자를 적지 않으면 default접근 지정자 : 자기자신과 같은 패키지에서만 접근할 수 있다는 것을 의미
public class AccessObj{ 
	private int i = 1; 
 	int k = 2; // default접근 제한자 
    
	public int p = 3; 
 	protected int p2 = 4; 
   }

 


AccessObj를 사용하는 AccessObjExam

  • AccessObj의 필드 i 의 접근 제한자는 private이므로 다른 클래스인 AccessObjExam에서 접근할 수 없다.
public class AccessObjExam{ 
	public static void main(String args[]){ 
		AccessObj po = new AccessObj();
 		System.out.println(po.i); // 컴파일 오류가 발생합니다. 
 		System.out.println(po.k); 
 		System.out.println(po.p); 
 		System.out.println(po.p2); 
	}
}

AccessObj 와 다른 패키지에서 사용해보기

  • 패키지가 달라졌기때문에 default접근제한자로 지정된 필드 k 와 protected 접근제한자로 지정된 필드 p2 도 접근할 없다.
public class AccessObjExam{ 
	public static void main(String args[]){ 
 		AccessObj po = new AccessObj(); 
		System.out.println(po.i); // 컴파일 오류가 발생합니다. 
		System.lout.println(po.k);// 컴파일 오류가 발생합니다. 
		System.lout.println(po.p); 
		System.lout.println(po.p2);// 컴파일 오류가 발생합니다. 
	} 
 }

AccessObjExam을 AccesObj로 부터 상속받도록 수정한 후 사용해 보기

  • 패키지는 다르지만 상속관계에 있으므로 protected 접근제한자로 지정된 필드 p2에 접근할 수 있다.
public class AccessObjExam extends AccessObj{ 
	public static void main(String[] args) { 
  		AccessObjExam obj = new AccessObjExam(); 
 		System.out.println(obj.p); 
		System.out.println(obj.p2); 
        	System.out.println(obj.k);// 컴파일 오류가 발생합니다. 
        	System.out.println(obj.i);// 컴파일 오류가 발생합니다. 
 	} 
 }

'PL(ProgrammingLanguage) > JAVA' 카테고리의 다른 글

super & 부모생성자  (0) 2021.10.11
추상클래스  (0) 2021.10.11
패키지  (0) 2021.10.09
[프로그래머스] 생성자 오버로딩 실습 (복습필요)  (0) 2021.10.09
메소드 오버로딩  (0) 2021.10.09