# 숨겨진 필드 변경하기 - 세터(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을 사용하면 안되는지 궁금합니다..!!
# 세터는 인스턴스 메소드이여야 합니다. # 클래스 메소드는 인스턴스(객체) 외부 즉, 클래스 영역에 존재하기 때문에 객체 내부의 필드값인 `password`에 직접 접근할 수 없습니다. 간접적 접근이 가능하려면 객체정보가 필요합니다. ``` public static void setPassword(Lock target, String s){ target.password = s; // password가 private이라면 동작 X } ```