프로그래밍 언어/JAVA

[JAVA] 자바의 접근제한자 Access Modifier

Rateye 2021. 1. 18. 14:22
728x90
반응형

접근제한자 Access Modifier

  • 클래스 또는 인터페이스의 멤버에 접근을 제한하는 키워드
  • 4가지(public, protected, (default), private) 로 구성되며 default 접근제한자는 별도의 키워드 없이 변수 또는 메서드 선언
    1. public : 외부의 모든 클래스에서 접근 가능하도록 지정
    2. private : 자신의 클래스에서만 접근 가능하도록 지정 (다른 클래스에서 접근 불가능하도록 지정)
    3. default(package) - 같은 패키지 내의 클래스에서 접근 가능 패키지 선행학습후 공부하기
    4. private - 자신의 클래스에서만 접근 가능 (다른 클래스에서 접근 불가)
  • 주로, 클래스 내의 멤버변수는 private 접근제한자를 사용하여 외부에서 접근할 수 없도록(내부에서만 접근 가능하도록) 제한하고 public 으로 선언된 Getter/Setter 메서드를 통해 간접적으로 멤버변수에 접근할 수 있도록 한다.
    1. Getter 메서드 : 내부의 멤버변수에 저장된 값을 외부로 리턴 매개변수는 없고, 리턴값만 있는 메서드로 정의 메서드명은 주로 getXXX() 형식으로 지정 XXX 은 해당 멤버변수의 변수명을 사용 ex. int 타입 변수 numGetter 메서드 이름 : getNum()
    2. Setter 메서드 : 외부로부터 데이터를 전달받아 멤버변수에 저장 매개변수만 있고, 리턴값은 없는 메서드로 정의 메서드명은 주로 setXXX() 형식으로 지정 XXX 은 해당 멤버변수의 변수명을 사용 ex. int 타입 변수 numSetter 메서드 이름 : setNum()
class Person {
	// 주로, 멤버변수(인스턴스 변수)는 외부에서 함부로 접근할 수 없도록
	// private 접근제한자를 사용하여 접근을 제한한다.
	private String name;
	private int age;

	// -------------------------------------------------------
	// 단축키를 활용한 Getter/Setter 메서드 자동 생성
	// 단축키 : Alt + Shift + S -> R
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	// -------------------------------------------------------
	
	// 인스턴스 변수 name 에 접근할 Getter/Setter 메서드 정의
	// => 누구나 접근할 수 있도록 접근제한자 public 사용 
	// 1) Getter 정의(매개변수는 없고, 리턴값만 있는 메서드)
	//	public String getName() {
	//		// 인스턴스 변수 name 값을 리턴
	//		return name;
	//	}
	
	// 2) Setter 정의(매개변수만 있고, 리턴값은 없는 메서드)
	//	public void setName(String newName) {
	//		// 외부로부터 전달받은 newName 값을 인스턴스 변수 name 에 저장
	//		name = newName;
	//	}
	
	// 변수 age 에 대한 Getter/Setter
	//	public int getAge() {
	//		return age;
	//	}
	
	//	public void setAge(int newAge) {
	//		age = newAge;
	//	}
	


	// private 으로 선언된 멤버도 같은 클래스 내에서 자유롭게 접근 가능
	// => 같은 클래스 내에서 접근 시 참조변수명 없이 이름만 지정
	public void print() {
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
	}
		// Person 클래스의 인스턴스 생성
		// 다음과 같이 데이터를 저장한 후 출력
		// 이름 : 홍길동
		// 나이 : 20
		Person p = new Person();
		//		p.name = "홍길동"; 
		// => private 접근제한자로 지정된 멤버변수는 외부에서 접근 불가능
		//		System.out.println("이름 : " + p.name);
		
		// Setter 메서드(setName())를 호출하여 name 에 저장할 이름을 전달
		p.setName("홍길동");
		
		// Getter 메서드(getName())를 호출하여 name 에 저장된 이름을 출력
		System.out.println("이름 : " + p.getName());
		
		
		//		p.age = 20;
		//		System.out.println("나이 : " + p.age);
		p.setAge(20);
		System.out.println("나이 : " + p.getAge());

 

728x90
반응형

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

[JAVA] 자바의 패키지 Package  (0) 2021.01.18
[JAVA] 자바의 생성자 Constructor  (0) 2021.01.18
[JAVA] 자바의 클래스 Class  (0) 2021.01.18
[JAVA] 자바의 메서드 Method  (0) 2021.01.18
[JAVA] 자바의 배열 Array  (0) 2021.01.18