티스토리 뷰
📍 접근 제한자
– 클래스, 메서드, 멤버변수 등의 접근 제한 용도로 사용하는 키워드.
– (넓은) public > protected > default > private (좁음)
→ 단, default 접근제한자는 별도의 키워드 없이 생략하면 적용됨.
1. private 접근제한자
– 외부 클래스에서 접근하지 못하며, 자신의 클래스 내에서만 접근 가능.
– 주로 외부에서 접근하지 못하도록 멤버변수에 적용함.
– 자신의 클래스 내에서 private 멤버변수 값에 접근하여 값을 변경하거나, 리턴하는 역할의 메서드를 정의하여 제공.
2. public 접근제한자
– 누구나 접근 가능.
– 주로 외부에서 접근하는 메서드에 적용.
– public이 붙을 수 있는건 해당 java파일과 이름이 같은 클래스뿐.
내부 클래스를 만든다면 public 사용 불가, 외부 클래스를 만든다면 사용 가능.
📍 Getter / Setter 메서드
– private로 선언된 멤버변수 등에 접근을 위해, 클래스 내에서 제공하는 중개 역할의 메서드.
– public 접근제한자를 사용하여 누구나 접근 가능하도록 정의.
– Generate Getters and Setters 자동 생성 단축키 : alt + shift + s → r
1. Getter
– 내부 멤버변수의 값을 외부로 리턴하는 메서드.
– getxxx() 형식의 메서드 이름을 사용하여 정의하고, 이 때 xxx는 접근할 멤버변수의 이름을 사용함.
ex ) 멤버변수 num에 접근하는 Getter 메서드 이름 : getNum();
– 외부에서 private 접근제한자로 정의된 멤버변수(+데이터)를 사용하려면 get메서드를 호출하여 사용할 수 있음.
– 파라미터는 없고 리턴값만 있음.
public int getNum() {
return num;
}
2. Setter
– 외부로부터 값을 전달받아 내부 멤버변수에 저장하는 메서드.
– setxxx() 형식의 메서드 이름을 사용하여 정의하고, 이 때 xxx는 접근할 멤버변수의 이름을 사용함.
ex ) 멤버변수 num에 접근하는 Setter 메서드 이름 : setNum();
– 외부에서 private 접근제한자로 정의된 멤버변수(+데이터)를 초기화하여 사용하려면 set메서드를 호출하여 사용함.
– 파라미터만있고 리턴값은 없음.
public void setNum(int newNum) {
num = newnum;
}
EX1 )
• 외부클래스 Person 생성 & 멤버변수에 private 적용
public class Person {
// 멤버변수
private String name;
private int age;
private String jumin;
// get 메서드 정의
// 1. String name
public String getName() {
return name;
}
// 2. int age
public int getAge() {
return age;
}
// Set 메서드 정의
// 1. String name
public void setName(String newName) {
name = newName;
}
// 2. int age
public void setAge(int newAge) {
age = newAge;
}
}
– 외부에서 클래스를 생성했으므로 public 사용 가능.
return name;
– 멤버변수 name의 값을 외부로 리턴.
– 클래스의 멤버변수는 메서드에서 선언없이 그냥 쓸 수 있음.
public void setName(String newName) {
name = newName;
}
– 외부로부터 전달받은 name값(로컬변수 newName)을 멤버변수 name에 저장함.
• main 메서드에서 private 멤버변수 사용하기
Person p = new Person();
– 외부클래스의 멤버변수를 사용하려면 인스턴스를 만들어서 사용해야 함.
p.name = "박보검";
– The field Person.name is not visible.
– private 접근제한자로 정의했으므로 main 메서드에서 해당 멤버변수에 접근하려니 자동완성에도 안뜨고 에러 발생함.
– 원래라면 멤버변수 값을 변경하기 위해 참조변수를 통해 멤버변수에 접근이 가능하지만,
멤버변수 접근제한자가 private이므로 외부클래스에서 접근 불가!
// set 메서드 사용
p.setName("박보검");
p.setAge(20);
– 외부클래스에서 private 멤버변수에 접근하기 위해 set 메서드를 사용함.
→ Person클래스에서 getter & setter로 외부클래스에서도 사용할 수 있게끔 메서드를 정의해놓음.
– 해당 멤버변수를 '초기화'하여 사용하기 위해 set메서드를 호출하여 데이터를 '홍길동'으로 초기화 함.
→ set 메서드를 사용하여 새로운 데이터 저장.
// System.out.println("이름 : " + p.name); // not visible
// System.out.println("이름 : " + p.age); // not visible
// get 메서드 사용
System.out.println("이름 : " + p.getName());
System.out.println("나이 : " + p.getAge());
– set 메서드를 사용하여 멤버변수에 저장한 데이터를 출력하기 위해 get 메서드를 사용함.
→ 데이터를 저장(set)했으니, 가져와서(get) 출력하기.
✓ 실행 결과
이름 : 박보검
나이 : 20
EX2 )
• Test 클래스 안에 Account 클래스 생성
} // Test 클래스 끝
class Account{
// 멤버변수 생성
private String accountNo;
private String ownerName;
private int balance;
// Getter & Setter 메서드 정의
// String accountNo 변수
public String getAccountNo() {
return accountNo;
}
public void setAccountNo(String newAccountNo) {
accountNo = newAccountNo;
}
// String ownerName 변수
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String newOwnerName) {
ownerName = newOwnerName;
}
// int balance 변수
public int getBalance() {
return balance;
}
public void setBalance(int newBalance) {
balance = newBalance;
}
}
– Test 클래스 밑에 Account 클래스 생성함.
→ public 접근제한자를 사용할 수 있는건 해당 java파일의 이름인 Test 클래스만 사용가능함.
– 멤버변수를 생성하고 private 접근 제한자를 사용함.
– private 접근제한자가 걸려 있는 멤버변수들을 각각 getter와 setter 메서드로 정의해줌.
→ 외부 클래스에서 멤버변수에 간접적으로 접근하여 사용하기 위함.
public class Test {
public static void main(String[] args) {
// Account클래스 인스턴스 생성
Account acc = new Account();
// set메서드 사용
acc.setAccountNo("111-1111-111");
acc.setOwnerName("홍길동");
acc.setBalance(10000);
// get메서드 사용
System.out.println("계좌번호 : " + acc.getAccountNo());
System.out.println("예금주 : " + acc.getOwnerName());
System.out.println("잔고 : " + acc.getBalance());
} // mian 메서드 끝
} // Test 클래스 끝
– Account 클래스를 사용하기 위해 main메서드에서 인스턴스를 생성하여 해당 참조변수를 통해 멤버변수에 접근함.
– 새로운 데이터를 저장하여 출력하고 싶으므로 set메서드를 사용하여 데이터를 초기화 함.
– 저장한 데이터를 출력하기 위해 get메서드로 멤버변수에 접근하여 해당 데이터를 출력함.
'JAVA' 카테고리의 다른 글
생성자 (기본 생성자 / 파라미터 생성자) (0) | 2023.03.06 |
---|---|
배열 (특징 / 선언 & 생성 & 초기화 & 접근 / 연산 누적 / 2차원 배열) (0) | 2023.03.04 |
메서드 (method) — 형태에 따른 정의 & 호출 (0) | 2023.02.22 |
보조 제어문 (break / continue) (0) | 2023.02.11 |
반복문 / for문(for, 이중for) / while문(while, do-while, 중첩while) (0) | 2023.02.08 |
- Total
- Today
- Yesterday
- javascript
- Dao
- 오버라이딩
- 출력문
- model2
- 내장객체
- 단일행함수
- 업캐스팅
- 제어문
- Git
- DB
- 매개변수
- Java
- 다형성
- gitbash
- 논리형
- Method
- 원격저장소
- Object
- github
- null
- 데이터타입
- JSTL
- 인자
- 로컬저장소
- 숫자형
- jsp
- 주석문
- 문자형
- mysql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |