add bash scripts for git operations and Lombok documentation
This commit is contained in:
280
docs/java-core.md
Normal file
280
docs/java-core.md
Normal file
@@ -0,0 +1,280 @@
|
||||
자바에서 기본적으로 자주 사용되는 어노테이션들을 정리하겠습니다. 여기서 "기본적으로 자주 사용되는"이란 자바 표준 API(JDK)와 스프링 프레임워크, 그리고 일반적인 ORM(JPA) 환경에서 널리 활용되는 어노테이션을 기준으로 하겠습니다. 이들은 자바 개발에서 필수적인 기능(예: 클래스/메서드 정의, DI, 데이터베이스 매핑 등)을 제공하며, 특별한 외부 라이브러리 없이도 자주 등장합니다.
|
||||
|
||||
아래에서 주요 어노테이션을 표 형식으로 정리한 뒤, 각 어노테이션에 대한 설명과 예시를 제공하겠습니다.
|
||||
|
||||
---
|
||||
|
||||
### 자주 사용되는 어노테이션 표
|
||||
|
||||
| 어노테이션 | 설명 | 출처 |
|
||||
|-----------------------|----------------------------------------------------------------------------------------|---------------------|
|
||||
| `@Override` | 메서드가 상위 클래스나 인터페이스의 메서드를 재정의했음을 명시 | JDK (java.lang) |
|
||||
| `@Deprecated` | 해당 요소가 더 이상 권장되지 않음을 표시 | JDK (java.lang) |
|
||||
| `@SuppressWarnings` | 컴파일러 경고를 억제 | JDK (java.lang) |
|
||||
| `@FunctionalInterface`| 인터페이스가 단일 추상 메서드를 가지는 함수형 인터페이스임을 명시 | JDK (java.lang) |
|
||||
| `@SafeVarargs` | 가변 인자 메서드에서 타입 안전성을 보장함을 명시 | JDK (java.lang) |
|
||||
| `@Retention` | 어노테이션의 유지 범위를 지정 (SOURCE, CLASS, RUNTIME) | JDK (java.lang.annotation) |
|
||||
| `@Target` | 어노테이션이 적용될 수 있는 대상을 지정 | JDK (java.lang.annotation) |
|
||||
| `@Documented` | 어노테이션이 Javadoc에 포함되도록 지정 | JDK (java.lang.annotation) |
|
||||
| `@Inherited` | 어노테이션이 하위 클래스에 상속되도록 지정 | JDK (java.lang.annotation) |
|
||||
| `@SpringBootApplication` | 스프링 부트 애플리케이션의 메인 클래스임을 나타내며, 여러 설정을 포함 | Spring Boot |
|
||||
| `@Autowired` | 의존성 주입(DI)을 자동으로 수행 | Spring Framework |
|
||||
| `@RestController` | RESTful 웹 서비스 컨트롤러임을 지정 | Spring Framework |
|
||||
| `@RequestMapping` | HTTP 요청을 메서드나 클래스에 매핑 | Spring Framework |
|
||||
| `@GetMapping` | HTTP GET 요청을 메서드에 매핑 | Spring Framework |
|
||||
| `@PostMapping` | HTTP POST 요청을 메서드에 매핑 | Spring Framework |
|
||||
| `@Entity` | 클래스가 JPA 엔티티임을 나타냄 | JPA (jakarta.persistence) |
|
||||
| `@Id` | 엔티티의 기본 키(PK)를 지정 | JPA (jakarta.persistence) |
|
||||
| `@Column` | 필드가 데이터베이스 컬럼에 매핑됨을 지정 | JPA (jakarta.persistence) |
|
||||
| `@Table` | 엔티티가 매핑될 데이터베이스 테이블을 지정 | JPA (jakarta.persistence) |
|
||||
|
||||
---
|
||||
|
||||
### 각 어노테이션 상세 설명 및 예시
|
||||
|
||||
#### 1. `@Override`
|
||||
- **설명**: 메서드가 상위 클래스나 인터페이스의 메서드를 재정의했음을 컴파일러에 알립니다.
|
||||
- **예시**:
|
||||
```java
|
||||
class Parent {
|
||||
void display() { System.out.println("부모"); }
|
||||
}
|
||||
|
||||
class Child extends Parent {
|
||||
@Override
|
||||
void display() { System.out.println("자식"); }
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. `@Deprecated`
|
||||
- **설명**: 메서드나 클래스가 더 이상 사용되지 않음을 표시하며, 사용 시 경고를 발생시킵니다.
|
||||
- **예시**:
|
||||
```java
|
||||
class OldClass {
|
||||
@Deprecated
|
||||
void oldMethod() { System.out.println("구형 메서드"); }
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. `@SuppressWarnings`
|
||||
- **설명**: 특정 경고(예: "unchecked", "deprecated")를 억제합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
@SuppressWarnings("unchecked")
|
||||
List rawList = new ArrayList(); // 경고 억제
|
||||
```
|
||||
|
||||
#### 4. `@FunctionalInterface`
|
||||
- **설명**: 단일 추상 메서드를 가진 인터페이스를 함수형 인터페이스로 표시합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
@FunctionalInterface
|
||||
interface MyFunction {
|
||||
void run();
|
||||
}
|
||||
```
|
||||
|
||||
#### 5. `@SafeVarargs`
|
||||
- **설명**: 가변 인자 메서드가 타입 안전함을 보장합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
@SafeVarargs
|
||||
static <T> void printAll(T... items) {
|
||||
for (T item : items) System.out.println(item);
|
||||
}
|
||||
```
|
||||
|
||||
#### 6. `@Retention`
|
||||
- **설명**: 어노테이션의 유지 범위를 지정합니다 (SOURCE: 소스 코드, CLASS: 바이트 코드, RUNTIME: 런타임).
|
||||
- **예시**:
|
||||
```java
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@interface MyAnnotation {}
|
||||
```
|
||||
|
||||
#### 7. `@Target`
|
||||
- **설명**: 어노테이션이 적용될 수 있는 위치(예: 메서드, 클래스 등)를 지정합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import java.lang.annotation.Target;
|
||||
import java.lang.annotation.ElementType;
|
||||
|
||||
@Target(ElementType.METHOD)
|
||||
@interface MyMethodAnnotation {}
|
||||
```
|
||||
|
||||
#### 8. `@Documented`
|
||||
- **설명**: 어노테이션이 Javadoc에 포함되도록 합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import java.lang.annotation.Documented;
|
||||
|
||||
@Documented
|
||||
@interface MyDocAnnotation {}
|
||||
```
|
||||
|
||||
#### 9. `@Inherited`
|
||||
- **설명**: 어노테이션이 하위 클래스에 상속됩니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import java.lang.annotation.Inherited;
|
||||
|
||||
@Inherited
|
||||
@interface MyInheritedAnnotation {}
|
||||
```
|
||||
|
||||
#### 10. `@SpringBootApplication`
|
||||
- **설명**: 스프링 부트 애플리케이션의 진입점을 정의하며, `@Configuration`, `@EnableAutoConfiguration`, `@ComponentScan`을 포함합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class Application {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 11. `@Autowired`
|
||||
- **설명**: 스프링의 의존성 주입을 자동으로 수행합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
public class UserService {
|
||||
@Autowired
|
||||
private UserRepository repository;
|
||||
}
|
||||
```
|
||||
|
||||
#### 12. `@RestController`
|
||||
- **설명**: REST API 컨트롤러를 정의하며, `@Controller`와 `@ResponseBody`를 결합한 형태입니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
|
||||
@RestController
|
||||
public class HelloController {
|
||||
@GetMapping("/hello")
|
||||
public String hello() { return "Hello, World!"; }
|
||||
}
|
||||
```
|
||||
|
||||
#### 13. `@RequestMapping`
|
||||
- **설명**: HTTP 요청을 클래스나 메서드에 매핑합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api")
|
||||
public class ApiController {
|
||||
@RequestMapping("/test")
|
||||
public String test() { return "API 테스트"; }
|
||||
}
|
||||
```
|
||||
|
||||
#### 14. `@GetMapping`
|
||||
- **설명**: HTTP GET 요청을 메서드에 매핑합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
|
||||
@RestController
|
||||
public class UserController {
|
||||
@GetMapping("/users")
|
||||
public String getUsers() { return "유저 목록"; }
|
||||
}
|
||||
```
|
||||
|
||||
#### 15. `@PostMapping`
|
||||
- **설명**: HTTP POST 요청을 메서드에 매핑합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
@RestController
|
||||
public class UserController {
|
||||
@PostMapping("/users")
|
||||
public String createUser(@RequestBody String user) { return "유저 생성: " + user; }
|
||||
}
|
||||
```
|
||||
|
||||
#### 16. `@Entity`
|
||||
- **설명**: 클래스가 JPA 엔티티임을 나타냅니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
|
||||
@Entity
|
||||
public class User {
|
||||
@Id
|
||||
private Long id;
|
||||
private String name;
|
||||
}
|
||||
```
|
||||
|
||||
#### 17. `@Id`
|
||||
- **설명**: 엔티티의 기본 키를 지정합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
|
||||
@Entity
|
||||
public class Product {
|
||||
@Id
|
||||
private Long productId;
|
||||
}
|
||||
```
|
||||
|
||||
#### 18. `@Column`
|
||||
- **설명**: 필드가 매핑될 데이터베이스 컬럼을 정의합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Column;
|
||||
|
||||
@Entity
|
||||
public class Employee {
|
||||
@Id
|
||||
private Long id;
|
||||
|
||||
@Column(name = "full_name")
|
||||
private String name;
|
||||
}
|
||||
```
|
||||
|
||||
#### 19. `@Table`
|
||||
- **설명**: 엔티티가 매핑될 데이터베이스 테이블을 지정합니다.
|
||||
- **예시**:
|
||||
```java
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "customers")
|
||||
public class Customer {
|
||||
@Id
|
||||
private Long id;
|
||||
private String name;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 결론
|
||||
위 어노테이션들은 자바 개발에서 필수적인 역할을 합니다. JDK 제공 어노테이션은 기본적인 코드 품질과 가독성을 높이고, 스프링 프레임워크 어노테이션은 의존성 주입과 웹 애플리케이션 개발을 간소화하며, JPA 어노테이션은 데이터베이스와 객체 간 매핑을 쉽게 처리합니다. 프로젝트 요구사항에 따라 적절히 선택하고 사용하면 개발 효율성과 유지보수성을 크게 향상시킬 수 있습니다.
|
||||
|
||||
추가로 궁금한 점이 있다면 말씀해주세요!
|
||||
Reference in New Issue
Block a user