[JAVA]Getter와 Setter /접근제한자(Public, Protected, Private, Default)2
@욕심쟁이
·2020. 8. 18. 14:02
반응형
1. Getter 메서드
- 내부의 멤버변수에 저장된 값을 외부로 리턴
- 매개변수는 없고, 리턴값만 있는 메서드로 정의
- 메서드명은 주로 getXXX() 형식으로 지정(XXX 은 해당 멤버변수의 변수명을 사용)
(ex. int 타입 변수 num 의 Getter 메서드 이름 : getNum())
2. Setter 메서드
- 외부로부터 데이터를 전달받아 멤버변수에 저장
→ 매개변수만 있고, 리턴값은 없는 메서드로 정의
→ 메서드명은 주로 setXXX() 형식으로 지정(XXX 은 해당 멤버변수의 변수명을 사용)
(ex. int 타입 변수 num 의 Setter 메서드 이름 : setNum())
예시1)
public class Ex {
public static void main(String[] args) {
// Person 클래스의 인스턴스 생성
// 다음과 같이 데이터를 저장한 후 출력
// 이름 : 홍길동
// 나이 : 20
Person p = new Person();
// p.name = "홍길동";
// => private 접근제한자로 지정된 멤버변수는 외부에서 접근 불가능
// System.out.println("이름 : " + p.name);
// Setter 메서드(setName())를 호출하여 name 에 저장할 이름을 전달
p.setName("홍길동");
// Getter 메서드(getName())를 호출하여 name 에 저장된 이름을 출력
System.out.println("이름 : " + p.getName());
// p.age = 20;
// System.out.println("나이 : " + p.age);
// => private 접근제한자로 지정된 멤버변수는 외부에서 접근 불가능
p.setAge(20);
System.out.println("나이 : " + p.getAge());
}
}
class Person {
// 주로, 멤버변수(인스턴스 변수)는 외부에서 함부로 접근할 수 없도록
// private 접근제한자를 사용하여 접근을 제한한다.
private String name;
private int age;
// -------------------------------------------------------
// 단축키를 활용한 Getter/Setter 메서드 자동 생성
// 단축키 : Alt + Shift + S -> R
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// -------------------------------------------------------
// 인스턴스 변수 name 에 접근할 Getter/Setter 메서드 정의
// => 누구나 접근할 수 있도록 접근제한자 public 사용
// 1) Getter 정의(매개변수는 없고, 리턴값만 있는 메서드)
// public String getName() {
// // 인스턴스 변수 name 값을 리턴
// return name;
// }
// 2) Setter 정의(매개변수만 있고, 리턴값은 없는 메서드)
// public void setName(String newName) {
// // 외부로부터 전달받은 newName 값을 인스턴스 변수 name 에 저장
// name = newName;
// }
// 변수 age 에 대한 Getter/Setter
// public int getAge() {
// return age;
// }
// public void setAge(int newAge) {
// age = newAge;
// }
// private 으로 선언된 멤버도 같은 클래스 내에서 자유롭게 접근 가능
// => 같은 클래스 내에서 접근 시 참조변수명 없이 이름만 지정
public void print() {
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
}
}
예시2)
public class Test {
public static void main(String[] args) {
/*
* Account 클래스의 인스턴스 생성 및 다음과 같이 데이터 저장, 출력
* 계좌번호 : 111-1111-111
* 예금주명 : 홍길동
* 현재잔고 : 100000원
*/
Account acc = new Account();
// Account 클래스의 멤버변수들은 모두 private 접근제한자이므로
// 외부 클래스에서 인스턴스 생성 후 직접 접근이 불가능하다!
// acc.accountNo = "111-1111-111";
// acc.ownerName = "홍길동";
// acc.balance = 100000;
acc.setAccountNo("111-1111-111");
acc.setOwnerName("홍길동");
// acc.setBalance(100000); // private 메서드는 외부에서 접근 불가
// => 대신 deposit() 또는 withdraw() 메서드로 입/출금 기능 활용
// System.out.println("계좌번호 : " + acc.accountNo);
// System.out.println("예금주명 : " + acc.ownerName);
// System.out.println("현재잔고 : " + acc.balance + "원");
System.out.println("계좌번호 : " + acc.getAccountNo());
System.out.println("예금주명 : " + acc.getOwnerName());
System.out.println("현재잔고 : " + acc.getBalance() + "원");
}
}
/*
* Account 클래스 정의
* - 멤버변수
* 1) 계좌번호(accountNo, String)
* 2) 예금주명(ownerName, String)
* 3) 현재잔고(balance, int)
*/
class Account {
private String accountNo;
private String ownerName;
private int balance;
// 멤버변수들에 대한 Getter/Setter 정의
public String getAccountNo() {
return accountNo;
}
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
}
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}
public int getBalance() {
return balance;
}
// 은행계좌에서 현재잔고를 직접 수정하는 것은 좋지 못하므로
// setBalance() 메서드를 제외하거나, private 으로 선언하면 된다!
private void setBalance(int balance) {
this.balance = balance;
}
}
반응형