자바 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(); //오류 } } Colored by Color Scripter |
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(); } } Colored by Color Scripter |
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{ } Colored by Color Scripter |
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 { } Colored by Color Scripter |
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(); //오류 } } Colored by Color Scripter |
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 |
sw.java
1 2 3 4 5 6 7 8 9 10 |
package on; public class sw extends won.Money { void set() { myMoney = 1000; } } Colored by Color Scripter |
cs |
Money클래스에서 myMoney를 protected로 선언했으므로 Money클래스를 상속한 클래스에서 myMoney에게 접근이 가능합니다.
-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(); } } Colored by Color Scripter |
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); } } Colored by Color Scripter |
cs |
sw클래스에서 Money객체를 만들고 myMoney변수에 접근해서 값을 변경하려하면 오류가 납니다.(private)
myMoney의 값을 변경하려면 Money클래스에서 함수를 만들어서 변경하면 됩니다. (setMoney 함수)
표 보는법
ex)protected접근자를 사용할때 클래스내부에 없고 패캐지에 없어도 상속받은 클래스면 접근가능
private접근자는 클래스내부에 있을 때만 사용가능
'JAVA' 카테고리의 다른 글
JAVA에서의 메모리 관리 (Heap, Stack, Static ) (0) | 2022.05.21 |
---|---|
[JAVA/자바] 메모리 구조(static, stack, heap) (1) | 2022.05.01 |
자바(JAVA) super & super() (0) | 2022.04.30 |
[Java] 래퍼 클래스(Wrapper Class)란 무엇인가? (박싱, 언박싱) (1) | 2022.04.26 |
[JAVA] 자바 for-each문 사용법 및 예제코드 (1) | 2022.03.21 |