Annotation
📌 코드에 메타데이터를 추가할 수 있는 기능을 제공하며 주로 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용된다.
- 어노테이션은 코드에서 직접적인 로직 실행에 영향을 미치지 않지만, 코드의 의미를 설명하거나 추가적인 처리를 위해 사용됩니다.
- "명함"를 생각하면 편하다. 이 명함은 "사람"에서 "프로그래머인 사람"이 된다. 사람이라는 정체성은 그대로이지만, 이 사람의 용도를 알 수 있다. 코드의 용도를 표시하며 실제로 컴파일러도 그 의미를 알지만 프로그램(사람) 자체에는 변화가 없다.
[1] 어노테이션 정의
- 어노테이션은 @ 기호로 시작하며, 클래스, 메서드, 변수, 매개변수, 패키지 등에 추가할 수 있다.
[2] 내장 어노테이션
- @Override
- 메서드가 상위 클래스나 인터페이스의 메서드를 오버라이드하고 있음을 나타낸다.
- 이때 컴파일러는 메서드가 실제로 오버라이드하고 있는지 확인한다.
- 메서드가 상위 클래스나 인터페이스의 메서드를 오버라이드하고 있음을 나타낸다.
- @Deprecated
- 해당 요소가 더 이상 사용되지 않음을 나타낸다.
- 해당 어노테이션이 붙은 코드를 사용하면 컴파일 경고가 발생한다.
- @SuppressWarnings
- 컴파일러 경고를 억제한다.
- 사용되지 않는 변수에 대한 경고를 무시할 수 있다.
- 컴파일러 경고를 억제한다.
[3] 사용자 정의 어노테이션
- 개발자가 필요에 따라 직접 어노테이션을 정의할 수 있다.
- 사용자 정의 어노테이션은 특정 메타데이터를 추가하거나,
- AOP(Aspect-Oriented Programming) 같은 기술과 결합하여 다양한 기능을 구현할 수 있다.
- AOP는 심화 주차에 배울 내용
Lombok
📌 Java에서 반복적인 코드를 줄여주는 라이브러리로, 코드의 가독성과 유지보수성을 높이는 데 도움이 됩니다. 주로 getter, setter, toString, equals, hashCode 메서드와 같은 보일러플레이트 코드를 자동으로 생성해줍니다.
[1] Lombok 사용 시 장점:
- 보일러플레이트 코드 감소: Lombok은 반복적인 코드(예: getter, setter, 생성자 등)를 자동으로 생성해 주어 코드가 간결해집니다.
- 코드의 가독성 향상: 중요한 로직에 집중할 수 있어 코드가 더 깔끔하고 이해하기 쉬워집니다.
- 생산성 향상: 반복적인 코드 작성에 소모되는 시간을 절약할 수 있습니다.
[2] Lombok 사용 시 단점:
- 자동 생성된 코드의 가시성 부족: Lombok은 컴파일 시 코드 생성이 이루어지기 때문에, IDE에서 코드가 어떻게 처리되는지 확인하기 어려운 경우가 있습니다.
- 디버깅 어려움: Lombok이 생성한 코드는 실제로 파일에 존재하지 않기 때문에, 디버깅 시 자동으로 생성된 메서드를 추적하는 데 어려움이 있을 수 있습니다.
@Getter, @Setter
- 클래스의 모든 필드에 대한 getter와 setter 메서드를 자동으로 생성한다.
- 예시 코드
@Getter
@Setter
public class User {
private String name;
private int age;
/** 아래 코드를 @Getter, @Setter 어노테이션이 생성해준다.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
**/
}
위 코드에서 getName(), setName(String name), getAge(), setAge(int age) 메서드가 자동으로 생성된다.
@ToString
- 객체의 toString() 메서드를 자동으로 생성한다.
- 기본적으로 클래스의 모든 필드를 포함하며, 특정 필드를 제외하거나 포맷을 지정할 수도 있다.
- 예시코드
@ToString
public class User {
private String name;
private int age;
}
- toString() 메서드는 객체를 String으로 변환해주는 역할을 수행한다.
@EqualsAndHashCode
- equals()와 hashCode() 메서드를 자동으로 생성한다.
- 객체의 동일성과 해시 코드를 정의하는데 사용된다.
- 예시 코드
@EqualsAndHashCode
public class User {
private String name;
private int age;
}
@NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor
- 기본 생성자를 생성한다.
- 모든 필드를 매개변수로 하는 생성자를 생성한다.
- 필수(final) 필드만을 매개변수로 하는 생성자를 자동으로 생성한다.
- 예시 코드
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private int age;
}
@Data
- @Getter, @Setter, @ToString, @EqualsAndHashCode,@RequiredArgsConstructor를 한꺼번에 적용하는 어노테이션이다.
- 주로 테스트 용도로 사용한다.
- 예시 코드
@Data
public class User {
private String name;
private int age;
}
@Builder
- 빌더 패턴을 적용해 객체를 생성할 수 있게 합니다. 복잡한 객체 생성에 유용하며, 필드 이름을 명시적으로 지정하면서 객체를 생성할 수 있다.
- 예시 코드
@Builder
public class User {
private String name;
private int age;
}
- 사용 예시
User user = User.builder()
.name("John")
.age(30)
.build();
@Slf4j
- 클래스에 로그를 남기기 위한 Logger 객체를 자동으로 생성한다.
- 예시 코드
@Slf4j
public class UserService {
public void logMessage() {
log.info("This is a log message");
}
}
'CS ( Computer Science ) > 알고리즘과 데이터 구조 (Algorithms and Data Struct' 카테고리의 다른 글
[AG&DS] 프레임워크와 라이브러리 (1) | 2024.12.07 |
---|---|
[AG&DS] 프로그래밍 명명규칙(Casing) (1) | 2024.11.29 |