Java and Spring Annotations and Concepts
1. Spring MVC와 관련된 항목들
- model.addAttribute:이유: 컨트롤러에서 뷰로 데이터를 전달할 때 사용됩니다. 뷰 템플릿에서 데이터를 사용하도록 추가하는 역할을 합니다.
- 예:
model.addAttribute("attributeName", attributeValue);
- ResponseEntity:이유: HTTP 응답을 직접 제어하고자 할 때 사용됩니다. 상태 코드, 헤더, 응답 본문을 표현할 수 있습니다.
- 예:
return new ResponseEntity<>(body, HttpStatus.OK);
- redirect:이유: 서버 측에서 리다이렉션을 수행하기 위해 사용됩니다. 클라이언트의 브라우저에 새로운 요청을 보냅니다.
- 예:
return "redirect:/home";
2. Java Collections와 Optional
- List<>:이유: 순서가 있는 데이터의 집합을 관리하기 위해 사용됩니다. 다양한 구현체를 통해 데이터 관리의 유연성을 제공합니다.
- 예:
List<String> list = new ArrayList<>();
- Optional<>:이유:
null
값으로 인한 NullPointerException
을 방지하고 명시적으로 값의 존재 여부를 표현하기 위해 사용됩니다.
- 예:
Optional<User> user = userRepository.findById(id);
- ArrayList<>:이유: 크기가 가변적인 배열을 사용하기 위해 사용됩니다.
- 예:
ArrayList<String> list = new ArrayList<>();
3. Spring Data JPA 관련
- Page<>:이유: 페이징 처리를 쉽게 구현하기 위해 사용됩니다.
- 예:
Page<User> users = userRepository.findAll(PageRequest.of(0, 10));
- JpaRepository<, >:이유: 데이터베이스와 상호 작용하는 기본 CRUD 기능을 제공하기 위해 사용됩니다.
- 예:
public interface UserRepository extends JpaRepository<User, Long> {}
4. Authentication 및 Security 관련
- GrantedAuthority:이유: 사용자의 권한 정보를 표현하기 위해 사용됩니다. Spring Security에서 사용자의 역할이나 권한을 나타냅니다.
- Collection:이유: 여러 개의 요소를 그룹화하여 관리하기 위해 사용됩니다.
- 예:
Collection<String> roles = new ArrayList<>();
5. DTO (Data Transfer Object)
- 이유: 데이터를 계층 간에 전달하기 위해 사용됩니다. 비즈니스 로직이 포함되지 않고 데이터를 담는 역할만 합니다.
- 예:
public class UserDTO { private String username; private String email; }
6. Exception 처리 및 메서드 사용
- throw Exception / 메서드 끝 throws 예외처리:이유: 예외 상황을 호출자에게 알리고 처리하도록 하기 위해 사용됩니다.
- 예:
public void readFile(String fileName) throws IOException {
throw new IOException("File not found");
}
7. JWT 및 HTTP 관련
- HttpServletResponse:이유: HTTP 응답을 생성하고 제어하기 위해 사용됩니다. 상태 코드, 헤더 설정, 본문 데이터를 출력할 수 있습니다.
- 예:
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().write("Success");
- jwt (JSON Web Token):이유: 사용자 인증과 권한 부여를 위한 토큰 기반 인증 메커니즘을 구현하기 위해 사용됩니다.
8. Access Modifiers와 Interface
- public / private / static:이유: 클래스, 메서드, 변수의 접근 수준 및 메모리 관리를 제어하기 위해 사용됩니다.
- public: 모든 클래스에서 접근이 가능하도록 설정합니다.
- private: 해당 클래스 내에서만 접근이 가능하도록 설정합니다.
- static: 클래스에 속하는 정적 멤버를 정의하며, 인스턴스 없이도 접근할 수 있습니다.
- interface:이유: 클래스가 구현해야 할 메서드 목록을 정의하고 다형성을 제공하기 위해 사용됩니다.
- 예:
public interface Animal {
void sound();
}
- extends:이유: 클래스 상속을 통해 부모 클래스의 기능을 확장하기 위해 사용됩니다.
- 예:
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("Bark");
}
}