0907 JAVA - 접근제한자, Getter / Setter
클래스, 메서드, 멤버변수 등의 접근 제한 용도로 사용하는 키워드
- (넓) public > protected > default > private (좁)
=> 단, default 접근 제한자는 별도의 키워드 없이 생략하면 적용
private 접근제한자
- 외부 클래스에서 접근하지 못하며, 자신의 클래스 내에서만 접근 가능
주로, 외부에서 접근하지 못하도록 멤버변수에 적용
- 자신의 클래스 내에서 private 멤버변수 값에 접근하여
멤버변수의 값을 변경하거나 리턴하는 역할의 메서드를 정의하여 제공
<Person.class>
Person 에서 private 클래스를 만들어줌.
package access_modifier;
public class Person {
private String name;
private int age;
}
그러면, 다른 클래스 Ex.class 에서는 private 멤버변수 값에 접근할 수 없다!! < -> 반대 public 메서드
검색해도 나오지 않는 모습.
Getter / Setter 메서드
클래스 내에서 private 접근제한자로 선언된 멤버변수 등에 접근을 위해
클래스 내에서 제공하는 중개 역할의 메서드
-public 접근제한자를 사용하여 정의 (누구나 접근 가능)
alt + shift + s + R
Getter :
내부 멤버변수의 값을 외부로 리턴하는 메서드
=> getXXX() 형식의 메서드 이름을 상요하여 정의 , 이 때, XXX는 접근할 멤버변수의 이름을 사용
ex) 멤버변수 num 에 접근하는 Getter 메서드 이름 : getNum()
=> 파라미터는 없고, 리턴값만 있는 메서드
ex) public int getNum() {}
Setter :
외부로부터 값을 전달 받아 내부 멤버변수에 저장하는 메서드
=> setXXX() 형식의 메서드 이름을 사용하여 정의 , 이 때, XXX는 접근할 멤버변수의 이름을 사용
ex) 멤버변수 num 에 접근하는 Setter 메서드 이름 : setNum()
=> 파라미터는 있고, 리턴값은 없는 메서드
ex) public void setNum() {}
public class Person {
//외부에서 멤버변수에 접근이 불가능하도록 private 접근제한자 적용
private String name = "홍길동";
private int age;
//멤버변수 대신 접근하도록 Getter / Setter 메서드 정의 (public 접근제한자 사용)
// 1. Getter 메서드 정의
// => 파라미터는 없고, 리턴값만 있는 메서드
// String 타입 멤버변수 name 에 대한 Getter 메서드
public String getName() {
//멤버변수 name 의 값을 외부로 리턴
return name;
}
//int 타입 멤버변수 age 에 대한 Getter 메서드
public int getAge() {
//멤버변수 age 값을 외부로 리턴
return age;
}
// 2. Setter 메서드 정의
// => 파라미터만 있고, 리턴값은 없는 메서드
// String 타입 멤버변수 name 에 대한 Setter 메서드 정의
public void setName(String newName) {
//외부로부터 전달받은 name 값 (로컬변수 newName(갈색))을 멤버변수 name 에 저장
name = newName;
}
//int 타입 멤버변수 age에 대한 Setter 메서드 정의
public void setAge(int newAge) {
//외부로부터 전달받은 age 값 (로컬변수 newAge)을 멤버변수 age에 저장
}
}
1. new 클래스 인스턴스 생성
2. private함수 만들기
3. set 메서드 만들기
4. get 메서드 만들어서 출력하기
public static void main(String[] args) {
// 은행계좌 (Account) 클래스의 인스턴스(acc) 생성
Account acc = new Account();
// Setter() 메서드로 111-1111-111, 홍길동, 10000원 입력
acc.setAccountNo("111-1111-111");
acc.setOwnerName("홍길동");
acc.setBalance(10000);
// Getter() 메서드를 활용해서 계좌번호, 예금주명, 현재잔고 출력
System.out.println(acc.getAccountNo());
System.out.println(acc.getBalance());
System.out.println(acc.getOwnerName());
}
}
// Account 클래스의 멤버변수를 private 접근제한자로 선언
class Account {
private String accountNo;
public String getAccountNo() {
return accountNo;
}
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
}
private String ownerName;
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}
private int balance;
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}