클래스 이름으로 인스턴스 메서드를 호출할 수 없다. 대신 해당 클래스의 객체를 생성하고, 해당 객체를 이용해 인스턴스 메서드를 호출할 수 있다.
거꾸로, 인스턴스를 이용해 해당 인스턴스의 클래스의 정적 메서드를 호출할 수는 있다. 그러나 보통 정적 메서드는 인스턴스의 상태와 무관하게 동작하는 메서드이므로, 클래스 이름을 통해 정적 메서드를 호출하는 것이 더 직관적이고 바람직한 방법이다.
ex) getAllUsers 가 인스턴스 메서드인 경우, 클래스 이름인 UserRepository 로 getAllUsers 함수 호출이 불가능하다.
UserRepository.java
@Repository
public class UserRepository {
// db연동...
// JPA 이용해서 ...
//임시
static public ArrayList<UserDTO> users;
static {
users = new ArrayList<>();
users.add(new UserDTO("kang", "test1", "1234"));
users.add(new UserDTO("park", "test2", "1234"));
users.add(new UserDTO("kim", "test3", "1234"));
}
...
//객체에 종속되지 않은 내용(users)에 접근할때는 static 이어야 함
public List<UserDTO> getAllUsers() {
return users;
}
...
}
UserService.java
@Service
public class UserService {
@Autowired//계층간 통신을 위한 의존성 설정
UserRepository userRepository;
public UserDTO insertUser(UserDTO user) {
return userRepository.insertUser(user);
}
public List<UserDTO> getAllUsers() {
return UserRepository.getAllUsers();
}
}