JAVA

[Java] Getter / Setter 메서드

sagesse2021 2021. 10. 28. 17:21
반응형
         /* 
		 * Getter / Setter 메서드
		 * - 클래스 내에서 private 접근제한자로 선언된 멤버변수 등에 접근을 위해
		 *   클래스 내에서 제공하는 중개 역할의 메서드
		 * - public 접근제한자를 사용하여 정의(누구나 접근 가능)
		 * 1. Getter : 내부 멤버변수의 값을 외부로 리턴하는 메서드
		 *    => getXXX() 형식의 메서드 이름을 사용하여 정의
		 *       이 때, XXX 은 접근할 멤버변수의 이름을 사용
		 *       ex) 멤버변수 num 에 접근하는 Getter 메서드 이름 : getNum()
		 *    => 파라미터는 없고, 리턴값만 있는 메서드
		 *       ex) public int getNum() {}
		 * 2. Setter : 외부로부터 값을 전달받아 내부 멤버변수에 저장하는 메서드
		 *    => setXXX() 형식의 메서드 이름을 사용하여 정의
		 *       이 때, XXX 은 접근할 멤버변수의 이름을 사용
		 *       ex) 멤버변수 num 에 접근하는 Setter 메서드 이름 : setNum()
		 *    => 파라미터만 있고, 리턴값은 없는 메서드
		 *       ex) public void setNum(매개변수선언...) {}
		 * => Getter/Setter 메서드 자동 생성 단축키
		 *    Alt + Shift + S -> R
		 */
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 에 저장
		age = newAge;
	}
	
}
public class Ex {

	public static void main(String[] args) {

		// Person 클래스의 인스턴스 생성
		Person p = new Person();
		// 멤버변수 값을 변경하기 위해 참조변수를 통해 멤버변수에 접근
		// => 멤버변수 접근제한자가 private 이므로 외부클래스에서 접근 불가
//		p.name = "홍길동"; // not visible
//		p.age = 20; // not visible
		// => 멤버변수에 저장할 값을 대신 전달받을 Setter 메서드 호출
		p.setName("홍길동"); // 이름을 전달받아 초기화하는 setName() 메서드 호출
		p.setAge(20); // 나이를 전달받아 초기화하는 setAge() 메서드 호출
		
		// 멤버변수 값을 출력하기 위해 참조변수를 통해 멤버변수에 접근
		// => 멤버변수 접근제한자가 private 이므로 외부클래스에서 접근 불가
//		System.out.println("이름 : " + p.name); // not visible
//		System.out.println("나이 : " + p.age); // not visible
		// => 멤버변수 값을 대신 리턴해주는 Getter 메서드 호출
		System.out.println("이름 : " + p.getName());
		System.out.println("나이 : " + p.getAge());
	}

}
/*
이름 : 홍길동
나이 : 20
*/
public class Test {

	public static void main(String[] args) {
		// 은행계좌(Account) 클래스의 인스턴스(acc) 생성
		Account acc = new Account();
		
//		acc.accountNo = "111-1111-111";
//		acc.ownerName = "홍길동";
//		acc.balance = 10000;
		// => Setter 메서드로 대체
		acc.setAccountNo("111-1111-111");
		acc.setOwnerName("홍길동");
		acc.setBalance(10000);
		
//		System.out.println("계좌번호 : " + acc.accountNo);
//		System.out.println("예금주명 : " + acc.ownerName);
//		System.out.println("현재잔고 : " + acc.balance + "원");
		// => Getter 메서드로 대체
		System.out.println("계좌번호 : " + acc.getAccountNo());
		System.out.println("예금주명 : " + acc.getOwnerName());
		System.out.println("현재잔고 : " + acc.getBalance() + "원");
	}

}

class Account {
	// Account 클래스의 멤버변수를 private 접근제한자로 선언
	private String accountNo;
	private String ownerName;
	private int balance;
	// Getter/Setter 메서드를 정의하여 멤버변수에 간접적으로 접근하도록 수행
		// 1. String accountNo 변수에 대한 Getter/Setter
//		public String getAccountNo() {
//			return accountNo;
//		}
	//	
//		public void setAccountNo(String newAccountNo) {
//			accountNo = newAccountNo;
//		}
		
		// 2. String ownerName 변수에 대한 Getter/Setter
//		public String getOwnerName() {
//			return ownerName;
//		}
	//	
//		public void setOwnerName(String newOwnerName) {
//			ownerName = newOwnerName;
//		}
		
		// 3. int balance 변수에 대한 Getter/Setter
//		public int getBalance() {
//			return balance;
//		}
	//	
//		public void setBalance(int newBalance) {
//			balance = newBalance;
//		}
	// ================================================
	// 단축키를 사용하여 Getter/Setter 메서드 자동 정의
	// - 클래스 내에서 멤버변수 선언 후 Alt + Shift + S -> R
	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;
	}
	public void setBalance(int balance) {
		this.balance = balance;
	}
}
/*
계좌번호 : 111-1111-111
예금주명 : 홍길동
계좌잔고 : 1000원
*/
public class Test2 {

	public static void main(String[] args) {
		
		Account acc = new Account("1111-1111-1111", "홍길동", 10000);
		acc.showAccountInfo();
	}
}
		
class Account {
	private String accountNo;
	private String ownerName;
	private int balance;
	
	//생성자 초기화
	public Account(String accountNo, String ownerName, int balance) {
		this.accountNo = accountNo;
		this.ownerName = ownerName;
		this.balance= balance;
	}
	//인스턴스 변수 getter/setter
	public String getAccountNo() {
		return accountNo;
	}
	//this변수 사용해서 값저장
	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;
	}

	public void setBalance(int balance) {
		this.balance = balance;
	}
	//메소드 정의
	public void showAccountInfo() {
		System.out.println("계좌번호 : " + accountNo);
		System.out.println("예금주면: " + ownerName);
		System.out.println("현재잔고 : " +balance + "원");
	}
}
/*
계좌번호 : 1111-1111-1111
예금주면: 홍길동
현재잔고 : 10000원
*/
반응형

'JAVA' 카테고리의 다른 글

[Java] 메서드 오버로딩(Method Overloading)  (0) 2021.10.28
[Java] 생성자(Constructor)  (0) 2021.10.28
[Java] 접근제한자  (0) 2021.10.28
[Java] Class 연습  (0) 2021.10.28
[Java] Class  (0) 2021.10.28