private
🔒 private 접근제한자의 의미
- private으로 선언된 필드는 클래스 외부에서 직접 접근할 수 없습니다.
- 즉, f.name이나 f.price 처럼 직접 읽거나 쓰는 게 불가능해요. (컴파일 오류 발생)
그래서 값을 넣을 때는 setter 메서드,
값을 꺼낼 때는 getter 메서드를 반드시 이용해야 합니다.
class Fruit{
// setter 값을 설정하는 값
// getter 넣은 값을 가져와서 출력
private String name; // private을 사용하면 정보은닉이 된다. ==> setter로 값 입력 / getter로 값 출력
private int price;
// setter 값 입력 메서드
public void setName(String n) {
name = n; // name = 포도
}
public void setPrice(int p) { // 메서드를 통해서 조건을 설정하여 값을 넣기
if(p>0)
price = p;
}
// getter 값 출력 메서드
public String getName() { // 이름을 출력하는 메서드
return name;
}
public int getPrice(){ // 가격을 출력하는 메서드
return price;
}
}
public class Ex11_setter_getter {
public static void main(String[] args) {
Fruit f = new Fruit();
// setter 값 입력
f.setName("포도"); // n변수가 포도를 받아서 name에 저장
f.setPrice(3000); // 3000을 넘기면 P가 3000을 받음 p변수에 받은 값을 price에 넣음
// getter 값 출력
String s1 = f.getName(); //
System.out.println(s1);
int s2 = f.getPrice(); //
System.out.println(s2);
}
}
장점
- 데이터 보호: 외부에서 필드를 함부로 바꾸지 못하게 막을 수 있음.
- 조건 부여 가능: setPrice()처럼, 잘못된 값이 들어오지 않도록 조건 검사를 추가할 수 있음.
- 유연성: 나중에 내부 구조가 바뀌더라도 메서드 인터페이스만 유지하면 외부 코드 수정 필요 없음.
this
class Fruit {
private String name;
private int price;
public void setName(String name) {
this.name = name;
// this.name → 멤버변수
// name → 매개변수 (지역변수)
}
}
- 매개변수 이름과 멤버변수 이름이 같을 때,
그냥 name = name; 하면 지역변수끼리만 대입돼서 멤버변수는 값이 안 바뀌어요. - 그래서 this.name = name; 처럼 this를 붙여줘야 멤버변수에 값을 넣습니다.
class Human{
private String name;
private int age;
private double height;
// setter : 값을 설정하는 곳
public void setName(String name){
this.name = name; // 변수이름이 똑같을 때 this를 붙인다. (멤버변수 name)에 넣어라.
}
public void setHeight(double h) {
if(0<h) {
height = h;
}
}
public void setAge(int a) {
if(0<a) {
age = a;
}
}
// getter : 넣은 값을 가져오는 곳
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getHeight(){
return height;
}
}
// ======== main ========
public class Ex12_stter_getter {
public static void main(String[] args) {
Human h = new Human(); // 객체 생성
// 값 입력 : setter
h.setName("윤아");
h.setAge(30);
h.setHeight(172.9);
// 값 출력 : getter
String name = h.getName();
int age = h.getAge();
double height = h.getHeight();
System.out.println("이름 :" + name);
System.out.println("나이 :" + age);
System.out.println("키 :" + height);
}
}