개발 일기

접근자의 종류와 기능 본문

Tech/Interview

접근자의 종류와 기능

flow123 2022. 2. 9. 11:54

접근자의 종류와 기능 

 

접근 제어자란?

객체 지향 프로그램에서는 예약어를 사용해서 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있다. 이러한 예약어를 접근 제어자라고 한다. 

 

접근 제어자의 종류 

변수는 선언한 접근 제어자에 따라 다음과 같은 특징을 지닌다. 

 

Public: 메서드는 외부 클래스에서 접근이 가능하며, 외부 클래스가 사용할 수 있다. 

private: 같은 클래스내에서만 접근이 외부 클래스에서 사용할 수 없다. 

protected: 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고 그 외 클래스에서는 접근할 수 없다. 

default없음: 아무것도 없을 때도 해당한다. 같은 패키지 내부에서만 접근 가능하다. 

 

private -> protected ->protected -> public 순으로 많은 접근을 허용한다. 

 

정보 은닉이란? 

클래스 내부에서 사용할 변수나 메서드는 private으로 선언해서 외부에서 접근하지 못하도록 하는 것이다. 

정보 은닉은 객체 지향 프로그래밍의 특징 중 하나다. 자바에서는 접근 제어자를 사용해서 정보 은닉을 구현한다. 

 

package hiding; 

public class Student {
	int StudentID; 
	private String studentName; 
//	String studentName; 
	int grade; 
	String address; 
	
	public String getStudentName() {
		return studentName; 
	}

}

 

package hiding; 

public class StudentTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student studentLee = new Student(); 
		studentLee.studentName = "이상원";
		
		System.out.println(studentLee.getStudentName());
	}
}

 

Student 클래스가 private 이기 때문에 에러가 뜬다. public 이면 접근이 가능하지만, private 은 외부 클래스의 접근을 허용하지 않기 때문이다. 

 

 

get() set () 메서드

private 변수를 외부에서 접근하려면 get(), set() 메서드를 사용하면 된다 

 

package hiding; 

public class Student {
	int StudentID; 
	private String studentName; 
//	String studentName; 
	int grade; 
	String address; 
	
	public String getStudentName() {
		return studentName; 
	}
	
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	
}

 

package hiding; 

public class StudentTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student studentLee = new Student(); 
		studentLee.setStudentName("이상원");
		
		System.out.println(studentLee.getStudentName());
	}
}

 

Public 변수로 설정하면 더 쉬울 텐데 왜 굳이 get set을 사용해야할까?  

public 으로 변수를 선언하면 접근이 제한되지 않으므로, 정보의 오류가 발생할 수 있다. 따라서 오류가 나면, 값이 해당 변수에 대입되지 못하도록 변수를 private 으로 바꾸고 public 메서드를 별도로 제공해야 하는 것이다. 

 

출처: 자바 프로그래밍 입문 

 

'Tech > Interview' 카테고리의 다른 글

Overriding vs Overloading  (0) 2022.02.09
Primitve vs Reference  (0) 2022.02.08
Comments