[스프링]어노테이션(Annotation) 모음

allnight5·2022년 12월 7일
0

스프링

목록 보기
4/62

애너테이션인지 어노테이션인지 모르겠지만.. 사람마다 부르는 이름이 다르단거로 이해하고 같은 뜻으로 이해하기로 하였다.
나중에는
1. Presentation 계층
2.Data Access(Persistence) 계층
3.Domain(Business or Service) 계층
계층별로 어노테이션을 나누고싶다.

  1. 어노테이션이란?

어노테이션을 이해하기 위해서는 먼저 메타데이터가 무엇인지 알 필요가 있다. 메타데이터는 데이터에 대한 속성 정보로, 하위 레벨 데이터를 설명 및 기술하는 데이터라고 이해할 수 있다. 그리고 어노테이션은 프로그램에게 추가적인 정보를 제동해주는 메타데이터라고 볼 수 있다.

어노테이션의 용도는 다음과 같다.

코드 문법 에러 체크
코드 자동 생성 정보 제공
런타임시 특정 기능을 실행하는 정보 제공
어노테이션은 클래스와 메서드에 추가되어 클래스 역할 정의, Bean 주입, getter 및 setter 자동 생성 등의 다양한 기능을 부여할 수 있다.

@Transactional이란?
DB의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다. begin, commit 을 자동으로 수행해주고, 예외 발생 시 rollback 처리를 자동으로 수행해준다.
DB를 다룰 때 Transactional을 적용하면 데이터 추가, 갱신, 삭제 등으로 이루어진 작업을 처리하던 중 오류가 발생했을 때 모든 작업들을 원상태로 되돌릴 수 있다. 모든 작업들이 성공해야만 최종적으로 DB에 반영하도록 한다.


생성자를 자동으로 생성해주는 어노테이션 3가지

@NoArgsConstructor :파라미터가 없는 기본 생성자를 생성
Student std = new Student();

@RequiredArgsConstructor :
final이나 @NonNull인 필드 값만 파라미터로 받는 생성자
Student std = new Student(1L);

@AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자 생성
Student std = new Student(1L, "홍길동", 20);


참조
@Setter
클래스 내 모든 필드의 Setter 메서드를 자동으로 생성하는 어노테이션.

@Getter
//클래스 내 모든 필드의 get함수를 자동으로 생성한다.

@MappedSuperclass
//클래스 밖에서 선언하여 클래스 안의 멤버 변수가 컬럼이 되도록합니다.

@EntityListeners(AuditingEntityListener.class)
//변경 되었을때 자동으로 기록합니다.

@ToString
클래스 내 모든 필드의 toString 메서드를 자동으로 생성하는 어노테이션.
@ToString(exclude = "password")
위와 같이 사용할 경우, 특정 필드를 toString() 결과에서 제외한다.

@Componenet

개발자가 정의한 클래스를 Bean으로 등록할 때 사용하는 어노테이션.

@Component
public class Fruit{
	public Fruit(){
    	system.out.println("fruit")
    }
}

@Component(value="apple")
public class Fruit{
	public Fruit(){
    	system.out.println("fruit")
    }
}

위 코드는 클래스 이름을 카멜케이스로 변경한 것이 Bean id로써 사용되고, 아래 코드는 value를 통해 Bean의 이름이 지정된다.

@ComponentScan

@Component, @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아서 Context에 Bean으로 등록하는 어노테이션.

@Bean

개발자가 제어 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용하는 어노테이션. 라이브러리를 Bean으로 등록할 때는 해당 라이브러리를 반환하는 메서드를 만든 후 @Bean 어노테이션을 사용한다. 아무런 값을 지정하지 않으면 메서드 이름을 카멜케이스로 변경한 것이 Bean id로 등록된다.

@Service

클래스가 서비스 역할을 한다고 명시하기 위해 사용하는 어노테이션. 비즈니스 로직을 수행하는 클래스라는 것을 나타내는 용도로 쓰인다.

@Controller

해당 클래스가 Controller의 역할을 한다고 명시하기 위해 사용하는 어노테이션. Spring MVC에서 Controller 클래스에 사용된다.

@RequestMapping

요청 URL을 어떤 메서드가 처리할지 mapping 해주는 어노테이션. Controller나 Controller의 메서드에 적용하고, 요청을 받는 형식인 GET/POST/PATCH/PUT/DELETE를 정의한다. 요청받는 형식을 정의하지 않는다면 자동적으로 GET으로 설정된다. 클래스 단위에 적용하면 하위 메소드에 모두 적용된다.

@Autowired

생성자, setter, 필드의 3가지 경우에서 사용하는 어노테이션. 타입에 따라 알아서 Bean을 주입해준다. 타입이 없으면 이름을 확인한다.
하지만 조건이 있다. 스프링 IoC컨테이너에 의해 관리되는 클래스만이 가능하다(@Component 나 @Bean 처럼 적용된클래스들)

@Configuration

해당 클래스가 Bean 구성 클래스임을 알려주는 어노테이션. @Configuration을 클래스에 적용하고 @Bean을 해당 클래스의 메서드에 적용하면 @Autowired로 Bean을 부를 수 있다.

@Qualifier("id123")

같은 타입의 Bean 객체가 있을 때 아이디를 적어 원하는 Bean이 주입될 수 있도록 하는 어노테이션. @Autowired와 같이 쓰인다.

@Test

JUnit에서 테스트 할 대상을 표시하는 어노테이션.

@Id
@Id 어노테이션은 주 키임을 나타낸다.

직접 할당하는 방식으로, 데이터베이스를 해당 프로퍼티를 통해 접근하게 된다.
@GeneratedValue
4가지의 방법으로 주키를 자동으로 생성해준다.
GenerationType.AUTO 특정 DB에 알맞게 자동 생성한다.
GenerationType.IDENTITY 기본키의 생성을 데이터베이스에 위임해 관리하도록 한다.
GenerationType.SEQUENCE 데이터베이스의 sequence 컬럼을 이용한다.
유일한 값을 순서대로 생성한다.
GenerationType.TABLE 키를 생성하는 테이블이 따로 있고, 이 테이블에 이름과 값을 만들어 사용하는 방법이다.

예시

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)

profile
공부기록하기

0개의 댓글