2021.03.17 - [* Language/Java] - [Java] 자바 : 접근 제한자 큰 그림 이해하기
이전 글에서 자바 전체에서 다루는 접근제한자에 대한 전체 큰 틀을 잡아봤다.
이 중 private에 대한 이해를 해볼려고 한다.
생각 해보기
private을 통하면 완전 비공개를 통해 어떠한 외부에도 공개를 하지 않는다. 하지만 인가된 사람이 접근을 할려고 할 때는 어떻게 해야 할까?
해 결? 우회적으로 접근하기(getter, setter)
class bankAccount{
// 필드
public userNum;
private pw;
private balance;
// 메소드
public getter();
public setter();
}
: private으로 선언된 이상 직접적인 접근은 불가능하다. 그렇다면 우회적으로 접근을 해야 한다. 바로 getter()와 setter()메소드 를 통해서.
정 의
* getter() - > private 필드 반환(get) CRUD 중 Read를 위한 호출이라 생각
: get - > 가져오다(받는 사람입장에선 가져 오지만 주는 입장에선 반환)
: private 필드를 우회적으로 접근 할 수 (Read) 있음.
* setter() - > private 필드 변경(set) CRUD중 Update 생각
: set - > Db Query문에서 set생각하면 쉽다.
: private 필드를 우회적으로 변경(Update) 가능.
코드로 살펴보기(getter, setter)
getter 예시
Problem)
: User 클래스의 필드 영역에 id와 number의 접근 제한자가 private 상황에서
Main 클래스에서 호출을 u.id, u.number로 호출하는 상황
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Main {
public static void main(String args[]) {
User u = new User("user1", 1);
System.out.printf("유저 아이디 : %s\n", u.id);
System.out.printf("회원번호 : %d\n", u.number);
}
}
class User {
private String id;
private int number;
User(id, number){
this.id = id;
this.number = number;
}
}
|
cs |
Solution)
: private 영역은 직접적인 접근이 불가능하다. 그렇기 때문에 우회적으로 접근을 해야하기 때문에
getter()로 추가해준다.(읽기 위해 가져오는 것!)
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
|
class Main {
public static void main(String args[]) {
User u = new User("user1", 1);
System.out.printf("유저 아이디 : %s\n", u.getId());
System.out.printf("회원번호 : %d\n", u.getNumber());
}
}
class User {
private String id;
private int number;
User(id, number){
this.id = id;
this.number = number;
}
public String getId(){
return id;
}
public String getNumber(){
return number;
}
}
|
cs |
: 게터 부분은 public으로 접근제한자 설정을 해줘야 한다. 그래야 접근 할 수 있으니까. 또한 반환 값을 적어야 한다.
setter예시
상황 : 12345 - > 67890 으로 변경
password = null
password = 12345
password = 67890 ← 최종 목표
Problem)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Main {
public static void main(String args[]) {
User u = new User("12345");
u.password = "67890";
System.out.println(u.toStr());
}
}
class User {
private String password;
public User(String pw1){
password = pw1;
}
public String toStr(){
return String.format("pw = %s", password);
}
}
|
cs |
: 잘못된 호출 User 클래스에 password의 접근제한자는 private 즉, 우회해서 변경을 해야 함.
Solution)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class Main {
public static void main(String args[]) {
User u = new User("12345");
u.setPassword() = "67890";
System.out.println(u.toStr());
}
}
class User {
private String password;
public User(String pw1){
password = pw1;
}
public String toStr(){
return String.format("pw = %s", password);
}
public void setPassword(String pw2){
password = pw2;
}
}
|
cs |
: setPassword()를 통해 전달 값인 인자를 설정해주고 해당 인자를 다시 필드 값으로 초기화
이 때 setPassword()는 반환하는게 아니라 그대로 변경하기 때문에 void로 선언 또한 get과 마찬가지로 public 접근제한자 설정
'* Web > [Back] Java' 카테고리의 다른 글
[Java] 자바 : (상속) 업 캐스팅 개념? (0) | 2021.03.18 |
---|---|
[Java] 자바 : 햇갈리는 this? 원리로 이해하는 개념 (0) | 2021.03.17 |
[Java] 자바 : 접근 제한자 큰 그림 이해하기 (0) | 2021.03.17 |
[Java] 자바 : static의 개념은 무엇이고 왜 사용할까? (0) | 2021.03.16 |
[Java] 자바 : 레퍼런스(Reference)란? (1) | 2021.03.16 |
댓글