접근제한자
변수, 메소드, 생성자, 클래스 등의 자원을 어떤 범위까지 접근가능한가 지정하는 예약어이다.
private | 해당 클래스 내에서만 접근이 가능. 손상을 막기 위해 다른 사람이 함부로 할 수 없다. (캡슐화) |
default | 접근제한자를 지정하지 않을 경우 붙는다. 기본적으로 같은 패키지 내에서만 접근이 가능하다. |
protected | 같은 패키지 내에서는 접근이 허용되고, 다른 패키지에서도 자식클래스에서는 접근이 가능하다. |
public | 모든 영역에서 접근이 가능. 다른 패키지에서도 접근이 가능하다. |
package Private2;
public class PrivateData {
private int privateVar = 10;
}
클래스는 public, 하지만 변수 앞에는 private로 지정이 되었다.
package Private2;
public class PrivateAccess {
public static void main(String[] args) {
PrivateData pd = new PrivateData();
// System.out.println(pd.privateVar);
}
}
접근 제한자가 private라면 변수 선언한 클래스(PrivateData) 안에서만 사용할 수 있기 때문에 에러가 뜬다.
final 예약어
package Private2;
public class Main {
public static void main(String[] args) {
final int number = 10;
//number = 5;
System.out.println(number);
}
}
final이 붙으면 변경이 불가능하다. 주로 상수를 정의할 때 변수 앞에 사용이 되고, 위에서는 생략이 됐지만 PI, MAX 처럼 대문자로 정의를 한다. final 앞에 static 예약어가 오지 않으면 해당 객체에서만 공유가 된다. 변수 뿐만 아니라 메소드와 클래스 앞에도 붙을 수 있는데 method 앞에 붙으면 오버라이딩을 할 수 없다. class 앞에 오면 상속할 수 없다. File 앞에 오면 파일 수정을 할 수 없다.
private 사용 방법
[Java] private, get-set 메소드 쉽게 생성하기(상속)
접근제한자를 배우진 않았지만 그 전에 각 변수에 private 지정하는 법과 get,set 메소드를 통해 해당 변수에 쉽게 접근하는 방법을 배워보겠다. 이런 형태를 캡슐화 라고 한다. 한 눈에 보기에 복잡
choittolbok.tistory.com
private 접근제한자 사용시 get-set과 변수 초기화 쉽게 하는 법이 나와있어서 참고하기에 좋다.
package Test;
public class Parent {
private String house;
private String money;
public String getHouse() {
return house;
}
public void setHouse(String house) {
this.house = house;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
public Parent(String house, String money) {
super();
this.house = house;
this.money = money;
}
public void show() {
System.out.println("부모는 " + getHouse() + "와(과) " + getMoney() + "을(를) 소유하고 있습니다.");
}
}
여기서 직접 손으로 써야 하는 부분은 마지막 show() 메소드이다. 자동으로 불러오기 하면 끝!
package Test;
public class Child extends Parent {
private String car;
private String ship;
public String getCar() {
return car;
}
public void setCar(String car) {
this.car = car;
}
public String getShip() {
return ship;
}
public void setShip(String ship) {
this.ship = ship;
}
public Child(String house, String money, String car, String ship) {
super(house, money);
this.car = car;
this.ship = ship;
}
public void show() {
System.out.println("자녀는 " + getCar() + "와 " +getShip()+"를(을) 소유하고 있습니다.");
}
}
Parents를 상속 받은 Child 클래스 마찬가지로 private 접근제한자를 사용했다.
package Test;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String house; String money; String car; String ship;
System.out.print("부모 집 ? ");
house = sc.next();
System.out.print("부모 돈 ? ");
money = sc.next();
System.out.print("나의 차 ? ");
car = sc.next();
System.out.print("나의 배 ? ");
ship = sc.next();
Child ch = new Child(house, money, car, ship);
Parent pr = new Parent(house, money);
ch.show();
pr.show();
sc.close();
}
}
'개발일지 > Java + Spring' 카테고리의 다른 글
[Java] 추상클래스 (0) | 2021.09.30 |
---|---|
[Java] 다형성 정의 (0) | 2021.09.29 |
[Java] 상속(extends)의 정의 - overriding, Super() (0) | 2021.09.29 |
[Java] private, get-set 메소드 쉽게 생성하기(상속) (0) | 2021.09.29 |
[Java] 생성자(Constructor), this() 생성자, 초기화 블록 (0) | 2021.09.29 |