2020.09.21 기초 자바프로그래밍 - 접근제어자

 --------------------------------------------------------------------------------------

package a_veriable;


public class AccessModifier {

 /*public  이 접근 제어자중 하나 

  * 

  * public 

  */

   public String publicVar = "public : 접근제한이 없음 " ; 

   protected String protectedVar = "protected : 같은 패키지 + 상속받은 클래스에서 접근 가능" ; 

   //같은 패키지에 있는 경우에 접근이 가능하고, 다른패키지에 있더라도 상속을 받으면 접근이 가능하다. 

   String defaultVar = "default : 같은 패키지에서만 접근 가능" ; 

   //생략을 해야지만 디폴트다. 접근제어자를 지금까지 적지 않았다. -> 왜냐면 디폴트였어서..... 디폴트는 적으면 안된다. 

   private String privateVar = " private : 클래스 내에서만 접근가능"; 

   //다른클래스에서는 접근이 불가능하다. 

   //**암기 

   public void publicMethod() { 

   System.out.println(publicVar); 

   }

   protected void protectedMethod(){ 

   System.out.println(protectedVar); 

   }

   

   void defaultMethod(){ 

   System.out.println(defaultVar); 

   }

   

   private void privateMethod(){ 

   System.out.println(privateVar);

   }

   


   

   public static void main (String[] args) { 

  AccessModifier am = new AccessModifier(); //객체생성을 해줌. 

  

  

  System.out.println(am.publicVar); 

  am.publicMethod(); 

  

// 접근제한이 없어서 . 

  

  System.out.println(am.protectedVar); 

  am.protectedMethod();

  

  System.out.println(am.defaultVar); 

  am.defaultMethod(); 

  

  System.out.println(am.privateVar); 

  am.privateMethod(); 

                      

  

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

   * 데이터를 보호하기 위해 (time 클래스에 ) 

   * 불필요한 멤버를 감추기 위해 

   * 

   * 빅맥

   * 1955  

   * 상하이

   * 양상추

   * 패티

   * 케첩

   * 마요네즈

   * 

   * 접근제어자를 사용해서 양상추부터 마요네즈까지 알필요 없는 애들을 감추는것. 

   * 주문할때는 빅맥 1955 , 상하이 만 알면된다. 

   * 즉 불필요한 멤버를 감추기 위해 접근 제어자를 사용하는것. 

   * 

   * 

   * 

   * 

   */

  Time t = new Time();  //객체 생성을 함 . 

/* t.hour = 9 ; 

  t.minute = 390; 

  t.second = -50 ; */

 

  //Time 에서 옴  //사용자들이 이상한 입력을 하게 될때 접근하지 못하게 하려고. private 을 붙여준다. 

//source -> getters and setters -> all  

  

  t.setHour(8);

  t.setMinute(390); 

  t.setSecond(-50); 

  System.out.println(t.getTime());

 

  t.clock();

  

  

   }

   


}

--------------------------------------------------------------------------------------

package a_veriable;


public class Time {


private int hour ; 

private int minute ;

private int second ;

public int getHour() {

return hour;

}

public void setHour(int hour) {

if( hour < 0  ) { 

this.hour = 0 ; 

}else if ( hour > 23){

this.hour = 0;

}else {

this.hour = hour;

}

}

public int getMinute() {

return minute;

}

public void setMinute(int minute) {

if(minute < 0 ){ 

this.minute = 0; 

}

else if (minute > 59){

this.minute = 0;

setHour( this.hour + 1 ) ; 

}

else {

this.minute = minute;

}

}

public int getSecond() {

return second;

}

public void setSecond(int second) {

if(second < 0){ 

this.second = 0 ; 

}

else if (second > 59){

this.second = 0;

setMinute(this.minute + 1 ) ; 

}

else{

this.second = second;

}

//사용자들이 이상한 입력을 하게 될때 접근하지 못하게 하려고. private 을 붙여준다. 

//source -> getters and setters -> all    --> 메소드로 만들어줌 

String getTime(){ 

return hour + ":" + minute + ":" + second; 

}

void clock(){ 

while(true){ 

System.out.println(getTime()); 

stop(10); 

setSecond(second + 1); 

    

   

}

}

private void stop(int i) {

    try { //예외처리 : 에러가 발생하는 것을 방지하는 것 

   

Thread.sleep(i);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//우리가 원하는   t.clock(); (AccessModifier 에있는 ) 얘를 사용하고 싶은데

    //그때 stop 은 알필요가 없지. clock 만 알고 싶잖아 그때 불필요한정보를

   // 감추기 위해서 private 을 사용하는것. 

   

}

}

--------------------------------------------------------------------------------------
package a_veriable.Test;

import a_veriable.AccessModifier;

public class AccessTest extends AccessModifier {

public static void main(String[] args) {
// TODO Auto-generated method stub
AccessModifier  am = new AccessModifier(); 
System.out.println(am.publicVar); 
am.publicMethod(); 
//System.out.println( am.protectedVar); 
//am.protectedVar ; 
//상속받기 전에는 컴파일 에러가 발생했었다. 
//상속을 public class AccessTest extends AccessModifier 해줬으면 AccessModifier를 통해서 접근을 하는게 안리ㅏ
//AccessTest 를 통해서 해야한다. 
AccessTest at = new AccessTest (); 
System.out.println(at.protectedVar); 
at.protectedMethod() ; 
/*System.out.println(at.defaultVar); 
System.out.println(at.privateVar); */
//두개는 컴파일에러가 발생한다. 
}

}

---------------------------------------------------------------------------------------
package a_veriable;



public class AccessT {

public static void main(String[] args) {
// TODO Auto-generated method stub
AccessModifier am = new AccessModifier(); 
System.out.println(am.publicVar); 
am.publicMethod(); 
System.out.println(am.protectedVar) ; 
am.protectedMethod (); 
System.out.println(am.defaultVar); 
am.defaultMethod(); 
System.out.println(am.privateVar); 
am.privateMethod(); 
//얘는 같은 클래스내에서만 가능하다. 그래서 접근이 불가능하다 컴파일 에러가 뜸 
}

}

댓글