[Java] 접근 제어자 ( public > protected > (default) > private )

Hyun·2023년 4월 22일
0

java

목록 보기
2/2

접근 제어자가 사용될 수 있는 곳 : 클래스, 메서드, 멤버변수, 생성자

// 클래스
public class Test {
}
// 메서드
public String Test() {

return ;
}
// 멤버 변수
public class Test {
	private a; // 멤버 변수
}
// 생성자
public class Test {
	private Test() { // 대부분 생성자의 접근 제어자는 클래스와 동일
  super();
  }
}

생성자에 접근 제어자(private)를 사용해 인스턴스의 생성을 제한
왜? 외부에서는 인스턴스 생성 못하게하고 클래스 내부에서만
인스턴스를 생성하려고




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

  1. 외부로부터 데이터를 보호하기 위해
    : 직접적인 사용을 막는다.
    아무 곳에서나 직접적으로 값을 변경 (hour = 3;)을 하면 다른 곳에서도 변경된 값이 들어감
    따라서 public으로 지정한 메소드를 생성하고 거기서
    set메소드를 통해 값을 변경하고 ( this.hour = hourC ) ,
    get메소드를 통해 값을 불러온다. ( return this.hour; )

    class Time {
    	private int hour; // private : 같은 클래스 내에서만 접근 가능
    	private int min; // 인스턴스 변수
    	private int sec;
    
    	public Time() { // 기본 생성자
    		super();
    	}
    
    	public Time(int hourC, int minC, int secC) {
    		super();
    		this.hour = hourC;
    		this.min = minC;
    		this.sec = secC;
    	}
    
    	public void hourChange(int hourC) {   // set()의 역할
    		if (!(hourC > 0 && hourC < 24)) {
    			System.out.println("범위에 벗어났습니다.");
    		} else {
    			this.hour = hourC;
    			System.out.println("시간이" + this.hour + "로 변경되었습니다.");
    		}
    	}
    }
    public class TimeEx {
    	public static void main(String[] args) {
    		Time time = new Time();
    		time.hour = 3;    // 에러!!
          // private라 이런식으로 접근할 수 없다. private를 지우면 접근 가능
          // 이렇게 직접적으로 값을 바꾸지 않기 위해서 접근 제어자 사용
    
    		time.hourChange(28); // 이런식으로 메소드를 통해 값을 바꾼다
    	}
    }

접근 제어자의 조합

(이 부분은 이해가 필요할 것 같다.)
  1. 메서드에 static과 abstract를 함께 사용할 수 없다.
  2. 클래스에 abstract와 final을 동시에 사용할 수 없다.
  3. abstract메서드의 접근 제어자가 private 일 수 없다.
  4. 메서드에 private과 final을 같이 사용할 필요는 없다.
profile
내가 바로 코린이

0개의 댓글