connecting the dots

Java의 접근지정자(public, protected, default, private) 본문

language/Java

Java의 접근지정자(public, protected, default, private)

林 : 2021. 1. 27. 04:30

이번 포스팅에서는 자바의 접근지정자에 대해 알아보겠습니다.

 

 

객체지향 언어인 자바를 공부하면서 가장 기본적으로 개념을 정리해야 하는게 접근지정자라고 생각합니다. 접근지정자를 어떻게 설정하냐에 따라 해당 객체에 대한 접근성이 달라지고 쓰임을 효율적으로 만들 수도 있습니다. 그렇다면, 접근지정자는 무엇이며 왜 중요할까요?

 

접근지정자의 종류

접근지정자는 public, protected, default, private 이렇게 네 가지로 나뉩니다. 각 개념에 대해 더 구체적으로 알아봅시다.

 

- public

  모든 접근을 허용하는 지정자입니다. 같은 패키지 내에서도 / 다른 패키지에서도 해당 클래스에 접근할 수 있습니다.

- protected

  같은 패키지 내에 있는 모든 클래스들은 접근이 가능합니다. 다른 패키지에 있더라도 상속관계라면 접근 가능합니다.

- default

  접근지정자를 설정하지 않았을 때 가장 기본이 되는 접근지정자입니다. 같은 패키지 내에 있는 클래스들만 접근이 가능합니다.

- private

  현재 객체 내에서만 접근이 허용됩니다. 같은 패키지에 있더라도 다른 객체에서는 접근이 불가합니다.

 

 

 

 

자바에서는 왜 접근지정자를 사용할까?  

 

보안 때문입니다. 접근지정자는 접근할 수 있는 범위를 제한합니다. 이걸 사용하는 이유는 외부의 접근으로부터 데이터를 보호하거나, 굳이 보여줄 필요가 없는 정보 또는 내부정보를 감추기 위함입니다.

 

만약 중요한 정보는 public 으로 지정한다고 가정해보겠습니다. public으로 선언된 객체는 다른 어디서든 접근이 가능하고 마음대로 값을 변경할 수도 있습니다. 그러므로 이런 중요한 정보는 보통 private으로 지정해주어 접근을 제한하는 것입니다.

 

또한 여러 사람들과 함께 프로그램을 만들다보면 다른 사람이 내가 만든 변수나 메소드를 무분별하게 값을 변경할 수도 있습니다. 이러한 상황을 막기 위해 해당 환경에 맞는 접근지정자를 사용하는 것입니다.

 

여러 객체들의 관계 속에서 구현되는 자바에서는 이렇게 중요한 변수와 메소드에 사용범위를 제한함으로써 더욱 완성도 높은 코드를 구현할 수 있습니다.

 

 

 

캡슐화(Encapsulation)

 

그렇다면 자바에서 캡슐화 한다는 것은 무엇을 의미하는 걸까요? 바로 중요 변수는 private으로 지정해 은닉화 하고 Setters(멤버 변수의 값을 지정)와 Getters(멤버 변수의 값을 얻음)를 통해서만 데이터에 접근할 수 있도록 하는 것입니다.

 

class Encapsulation {
	
	private int num;
	private String name;
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

public class EncapsulationTest {

	public static void main(String[] args) {
		Encapsulation e = new Encapsulation();
		e.setNum(10);
		e.setName("Tom");
		System.out.println(e.getNum() + "," + e.getName());
	}

}

 

코드를 보면 Encapsulation 클래스에서 num과 name 변수의 접근지정자를 private으로 설정했기 때문에 다른 클래스인 EncapsulationTest에서는 num과 name에 직접 접근하는 것은 불가능합니다.

 

그러므로 Setters와 Getters를 통해 private 변수에 접근해 값은 변경하거나 얻어내고 있습니다. (Setters와 Getters는 직접 작성하지 않아도 마우스 오른쪽 - Source - Generate Setters and Getters 에서 만들어 줍니다.) 

 

 

'language > Java' 카테고리의 다른 글

Java의 Comparable와 Comparator 인터페이스 차이  (0) 2021.03.19