자바 public,protected,private,default접근자의 차이에대해 알아보겠습니다.
처음부터 public의 접근권한은 어떻고.. 이론적으로 먼저 배우는 것보다 실제로 자기가 해보는 것이 기억에 잘 남는것 같아서 먼저 접근자로 실험을 해보고 마지막에 표로 정리하겠습니다.
클래스 정의할 때 사용하는 접근자 : public, default
public : 다른 패키지에서도 객체 생성 가능
default : 동일 패키지 내에서만 객체 생성 가능
Money.java
1 2 3 4 5 6 7 8 9 | package won; public class Money { public static void main(String[] args) { new on.sw(); //오류 } } | cs |
처음 자바파일을 만들면 위와 같은 형태로 되있습니다. 이때 2번째줄 class앞에 public이란 접근자를 볼 수 있는데 이 접근자가 있다면 Money클래스는 어디서든 객체를 생성당할수있습니다. 6번째 줄에서 sw객체를 만들고 있는데 sw객체는 default접근자이고 패키지가 다르므로 객체를 생성하지 못합니다.
sw.java
1 2 3 4 5 6 7 8 9 10 | package on; class sw { public static void main(String[] args) { new won.Money(); } } | cs |
class앞에 아무것도 없으면 default입니다. 이때 7번째 줄에서 Money의 객체를 만들고 있습니다. Money는 public이므로 객체를 생성 할 수 있습니다.
이 외에도 public는 파일 하나당 한번만 쓸 수 있습니다.
Money.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package won; public class Money { public static void main(String[] args) { } } class QW{ } class ER{ } | cs |
QW클래스와 ER클래스의 접근자는 default입니다. public을 사용한다면 오류가 납니다. 한 파일에서 public은 클래스명.java인 클래스에만 public을 써야합니다. 여기서는 파일이름이 Money.java이므로 Money클래스에만 public을 사용 할 수 있습니다.
Money.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package won; class Money { public static void main(String[] args) { } } public class QW { } class ER { } | cs |
QW클래스에 public이 붙어있이므로 오류가 납니다.
(오류내용 : The public type QW must be defined in its own file)
인스턴스 변수와 함수를 정의할 때 사용하는 접근자 : public,protected,private,default
public : 다른 패키지에서도 접근 가능
default : 동일 패키지 내에서만 접근 가능
protected : 상속 받은 클래스에서 접근 가능
private : 자기 클래스에서만 접근 가능(정보은닉)
- public , default
sw.java
1 2 3 4 5 6 7 8 9 10 11 | package on; public class sw { public static void main(String[] args) { won.Money m = new won.Money(); m.wowon(); m.aaaa(); //오류 } } | cs |
Money.java
1 2 3 4 5 6 7 8 9 10 11 | package won; public class Money { public void wowon() { System.out.println("안녕"); } void aaaa() { System.out.println("녕안"); } } | cs |
Money클래스의 wowon함수는 public이므로 다른 패키지에서 접근 가능하고 aaaa함수는 default이므로 동일 패키지에서만 접근 가능합니다.
sw클래스에서 Money객체를 만들고 wowon함수와 aaaa함수를 호출하는데 wowon함수는 호출이 되고 aaaa는 함수 호출이 안됩니다.(default)
-protected
Money.java
1 2 3 4 5 | package won; public class Money { protected int myMoney; } | cs |
1 2 3 4 5 6 7 8 9 10 | package on; public class sw extends won.Money { void set() { myMoney = 1000; } } | cs |
-private
private접근자는 자신의 클래스에서만 접근이 가능합니다. 정보은닉이라고도 불리며 객체 변수를 숨기는 기능을 합니다.
sw.java
1 2 3 4 5 6 7 8 9 10 11 12 | package on; public class sw { public static void main(String[] args) { won.Money m = new won.Money(); m.MyMoney = 100000; //오류 m.setMoney(10000); m.seeMoney(); } } | cs |
Money.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package won; public class Money { private int myMoney; public void setMoney(int m) { myMoney = m; } public void seeMoney() { System.out.println("돈 : " + myMoney); } } | cs |
sw클래스에서 Money객체를 만들고 myMoney변수에 접근해서 값을 변경하려하면 오류가 납니다.(private)
myMoney의 값을 변경하려면 Money클래스에서 함수를 만들어서 변경하면 됩니다. (setMoney 함수)
표 보는법
ex)protected접근자를 사용할때 클래스내부에 없고 패캐지에 없어도 상속받은 클래스면 접근가능
private접근자는 클래스내부에 있을 때만 사용가능
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
자바 메소드 오버로딩이란(Method Overloading) (0) | 2017.11.24 |
---|---|
자바 인스턴스 변수 vs 클래스 변수 (0) | 2017.11.24 |
자바 클래스와 인스턴스 (0) | 2017.11.21 |
네이버 API사용법 (java,안드로이드스튜디오) (7) | 2017.11.17 |
자바 HashMap 사용법입니다. (0) | 2016.12.14 |