클래스 이름으로 인스턴스 메서드 를 호출할 수 없다

Hyun·2023년 7월 25일
0

자바

목록 보기
1/1
post-thumbnail

클래스 이름으로 인스턴스 메서드를 호출할 수 없다. 대신 해당 클래스의 객체를 생성하고, 해당 객체를 이용해 인스턴스 메서드를 호출할 수 있다.

거꾸로, 인스턴스를 이용해 해당 인스턴스의 클래스의 정적 메서드를 호출할 수는 있다. 그러나 보통 정적 메서드는 인스턴스의 상태와 무관하게 동작하는 메서드이므로, 클래스 이름을 통해 정적 메서드를 호출하는 것이 더 직관적이고 바람직한 방법이다.

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();
    }
}
profile
better than yesterday

0개의 댓글