본문 바로가기
JAVA/개념정리

[JAVA] 접근제어자(Access Modifier)

by JJH0100 2022. 10. 7.
728x90
반응형

 

 

메소드가 헷갈리는 경우

2022.10.04 - [자바/개념정리] - [JAVA] 클래스와 메소드

 

[JAVA] 클래스와 메소드

자바는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)이다. 자바는 모든 데이터를 객체(object)로 취급한다. 객체(object)는 사물과 같은 것으로 상태(state)와 행동(behavior)을 포함한다. 자바에서..

jjh-blog.tistory.com

 

 

메인 메소드의 형태는 다음과 같다.

public static void main(String[] args){
  //메소드내용
}
접근제어자, access modifier 리턴 타입, return type 메소드명 (매개변수, parameter) 예외목록, exception list {
   //메소드내용
}

 

접근제어자

접근 제어자는 클래스, 맴버변수, 메서드, 생성자에 사용 되며, 외부에서 접근하지 못하도록 제한하는 역할을 한다.

자바에서는 4가지 접근 제어자를 제공한다.

  • private : 같은 클래스에서만 접근 가능
  • default : 같은 패키지 내의 클래스에서만 접근 가능
  • protected : 동일 패키지의 클래스, 클래스를 상속받은 다른 패키지의 클래스에서만 접근 가능
  • public : 모든 클래스에서 접근 가능

 

다음과 같은 Box9 클래스를 만들었다고 가정해보자.

 

EX01.

코드

class Box9{
	private int width;
	private int height;
	private int depth;
	private int vol;
	
	public Box9(int width, int height, int depth) {
		this.width = width;
		this.height = height;
		this.depth = depth;
		volume();
	}
	private void volume() {
		vol = width*height*depth;
	}
	public int getvolume() {
		return vol;
	}
}
public class Box9test1 {
	public static void main(String[] args) {
		Box9 mybox1 = new Box9(10,20,30);		
		mybox1.width = 20;
	}
}

결과

 

에러가 난다. 이유가 왜 일까.

콘솔 창에 [The field Box9.width is not visible] 이라는 문구를 볼 수 있는데, Box9에서 width값이 보이지 않는다는 뜻이다. private int width;로 우리는 변수에 접근을 제어해 놓았다. private는 같은 클래스 에서만 접근이 가능하므로 Box9test1 클래스에서는 접근 할 수 없다.  

 

 

EX02.

위의 코드에서 mybox1.width = 20; 를 int vol1 = mybox1.volume(); 로 바꿔보자.

코드

int vol1 = mybox1.volume();

결과

 

역시 에러가 난다. 

콘솔 창에 [The method volume() from the type Box9 is not visible] 라는 문구가 보일 것 이다. 해당 볼륨을 찾을 수 없다는 뜻이다. private void volume()로 우리는 볼륨에 접근을 제어해 놓았다. private는 같은 클래스 에서만 접근이 가능하므로 Box9test1 클래스에서는 접근 할 수 없다.  

 

접근 제어자는 클래스, 맴버변수, 메서드, 생성자에 사용 할 수 있다.

 

 

EX03.

위의 코드에서 System.out.println("정수 박스의 부피 : " + mybox1.getvolume());로 바꿔보자.

 

코드

System.out.println("정수 박스의 부피 : " + mybox1.getvolume());

결과

 

제대로 출력된다.

mybox1.getvolume()으로 public int getvolume()에 접근 했기 때문이다. public 모든 클래스에서 접근이 가능하므로 에러가 발생하지 않는다.

 

 

 

728x90
반응형

'JAVA > 개념정리' 카테고리의 다른 글

[JAVA] 상속과 생성자  (0) 2022.10.12
[JAVA] 상속 extends  (0) 2022.10.11
[JAVA] 생성자 - 예약어 this  (0) 2022.10.07
[JAVA] 생성자 - 묵시적 생성자, 명시적 생성자  (2) 2022.10.07
[Java] System.arraycopy  (0) 2022.10.06

댓글