자바를 이용하여 클래스와 메소드를 선언할 때 특별한 표기법을 통해 사용자의 접근을 제어하는 기능을 부여할 수 있는데요. 이를 자바 접근제어자 라고 합니다.
1. 접근제어자
역할 : 클래스, 메소드, 멤버(전역) 변수에 사용되어 해당 대상에 대한 접근을 제어
목적 : 접근접근을 제한함으로써 외부로부터의 접근을 제한하여 데이터를 변경하지 못하게 보호(캡슐화)
2. 종류
public | 접근에 대해 제한이 없음 |
protected | 같은 패키지 또는, 다른 패키지의 자손 클래스에서 접근 가능함 |
default | 같은 패키지에서만 접근이 가능함 |
private | 같은 클래스에서만 접근이 가능함 |
3. 예제소스
1) public : 접근에 대해 제한 없음
package test; public class Product { public String made = "Korea"; public int price = 100; }
public은 제한이 없기 때문에 어떤 패키지, 어떤 클래스에서도 접근이 가능합니다.
package test; public class ShowProduct { public static void main(String[] args) { Product p = new Product(); p.made = "한국"; p.price = 200; System.out.println("제조 :"+p.made); System.out.println("가격 :"+p.price); } }
제한이 없기 때문에 다른 클래스에서도 해당 클래스에 접근이 가능한 모습입니다.
2) protected : 같은 패키지나 상속 받을 경우 접근 가능
protected는 동일 패키지에서 사용이 가능하며, 해당 클래스를 다른 패키지에서 상속받아서 사용할 경우 접근이 가능합니다.
package test; public class Product { protected String made = "Korea"; protected int price = 100; }
package test2; import test.Product; public class ShowProduct { public static void main(String[] args) { Product p = new Product(); p.made = "한국"; p.price = 200; System.out.println("제조 :"+p.made); System.out.println("가격 :"+p.price); } }
product 클래스에서 변수를 protected로 변경해 보았습니다.
패키지가 다르기 때문에 접근이 안되는 모습입니다.
이럴 경우 패키지를 동일하게 하거나 Product를 상속받아 사용하면 됩니다.
- 패키지를 동일하게 구성하여 구동한 모습
3) Default : 동일 패키지에서만 접근 가능
특별이 접근제어자를 지정하지 않으면 자동으로 Default로 구성되는데요.
이는 동일한 패키지에서만 접근이 가능한 형태입니다.
package test; public class Product { String made = "Korea"; int price = 100; }
ShowProduct.java는 패키지가 다르기 때문에 에러를 나타내고 있습니다.
4) Private: 같은 클래스에서만 접근 가능
접근제어자에서 제한이 가장 큰 private인데요.
이는 같은 클래스에서만 접근이 가능합니다.
보통 실무 프로젝트에서는 변수를 private으로 선언하고 사용합니다.
패키지가 같은 모습입니다.
패키지가 같더라고 위와 같이 같은 클래스가 아니기 때문에 에러를 나타내는 모습입니다.
사용 방법
보통은 Private로 변수를 선언하고 public으로 선언된 메소드를 통하여 해당 변수에 값을 할당하는 방식을 많이 씁니다.
답글 남기기