# 숨겨진 필드 변경하기 - 세터(setter)
#### CODE <a class='btn btn-default' href='/codes/37587'>Link</a>
```
public class LockTest {
public static void main(String[] args) {
// 객체 생성
Lock lock = new Lock("123!@#");
/* 1. 세터를 호출하여, 비밀번호를 변경하시오. */
Lock.setPassword("654#@!");
// 객체 정보 출력
System.out.println(lock.toString());
}
}
class Lock {
// 필드
private String password;
// 생성자
public Lock(String p) {
password = p;
}
// 메소드
public String toString() {
return String.format("Lock { password: %s }", password);
}
/* 2. 비밀번호 변경을 위한, 세터 메소드를 추가하시오. */
public static void setPassword(String s){
password=s;
}
}
```
#### INPUT
```
```
#### OUPUT
```
/root/var/tmp/2021_01_07_07_32_06_97af5a92/LockTest.java:30: error: non-static variable password cannot be referenced from a static context
password=s;
^
1 error
```
> #### 클래스는 객체의 외부이기 때문에 private에 접근하지 못하는건가요..?
> #### 왜 static을 사용하면 안되는지 궁금합니다..!!
sehongpark님의 답변
# 세터는
인스턴스 메소드이여야 합니다.
# 클래스 메소드는
인스턴스(객체) 외부 즉, 클래스 영역에 존재하기 때문에
객체 내부의 필드값인 `password`에 직접 접근할 수 없습니다.
간접적 접근이 가능하려면 객체정보가 필요합니다.
```
public static void setPassword(Lock target, String s){
target.password = s; // password가 private이라면 동작 X
}
```