반응형
목차
1. 프레임워크
- 소프트웨어 개발을 간편하게 만들기 위한 소프트웨어 개발 환경.
- Frame(틀) work(일하다)의 합성어 → 일하기 위한 틀.
- 장점
- 개발 프로젝트에 일관된 구조 제공 → 코드의 일관성과 가독성을 높여줌. 팀 협업이 편해짐.
- 기본적으로 필요한 기능과 도구 제공 → 개발자들이 핵심 비즈니스 로직 집중 가능.
- 보안 관련 기능을 기본적으로 제공 → 보안 취약점을 방지하는 데 도움.
- 통합된 테스트 환경과 도구를 제공하여 테스트를 쉽게 작성하고 실행 가능.
- 인기 있는 프레임워크는 방대한 커뮤니티 지원을 받고, 다양한 문서 활용 가능.
- 단점
- 프레임워크는 굉장히 복잡한 구조를 가지기 때문에, 처음 익히는 데 시간이 많이 소요됨.
- 프레임워크의 새로운 버전이 기존 코드와 호환되지 않을 수 있음.
- 정해진 규칙과 구조를 따르게 강제하여 자유롭게 변경하기 어려움.
2. 라이브러리
- 애플리케이션 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음.
- 개발자가 소프트웨어를 만들 때 필요에 따라 원하는 기능을 구현하기 위해 가져다 쓸 수 있는 일종의 도구 역할을 수행.
- 장점
- 개발자가 복잡한 코드를 직접 작성하지 않아서 개발 생산성이 높아짐.
- 검증된 라이브러리는 테스트와 커뮤니티 지원을 통해 안정성과 품질이 보장됨.
- 단점
- 라이브러리가 업데이트 되거나 지원이 중단될 경우 문제가 발생할 수 있음.
- 버전 호환성 문제로 인해 다른 라이브러리나 기존 코드와 충돌이 발생할 수 있음.
- 생각보다 빈번하게 발생함.
- 불필요한 기능을 포함한 라이브러리를 사용하면 비효율적.
- 라이브러리의 내부 구현을 직접 수정하기 어려워, 특정 요구 사항에 맞게 조정하기 힘들 수 있음.
3. Annotation
- 코드에 메타데이터를 추가할 수 있는 기능을 제공.
- 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용.
- 특정 코드를 사용하는 프로그램에게 정보를 전달하는 것.
- 어노테이션 정의
- 어노테이션은 @ 기호로 시작하며, 클래스, 메서드, 변수, 매개변수, 패키지 등에 추가 가능.
- 내장 어노테이션
- @Override
- 메서드가 상위 클래스나 인터페이스의 메서드를 오버라이드 하고 있음.
- 이때 컴파일러는 메서드가 실제로 오버라이드하고 있는지 확인.
- 메서드가 상위 클래스나 인터페이스의 메서드를 오버라이드 하고 있음.
- @Deprecated
- 해당 요소가 더 이상 사용되지 않음을 나타냄.
- 해당 어노테이션이 붙은 코드를 사용하면 컴파일 경고 발생.
- @SupressWarnings
- 컴파일러 경고 억제.
- 사용되지 않는 변수에 대한 경고 무시 가능.
- 컴파일러 경고 억제.
- @Override
- 사용자 정의 어노테이션
- 개발자가 필요에 따라 직접 어노테이션을 정의할 수 있음.
- 사용자 정의 어노테이션은 특정 메타데이터를 추가하거나 AOP(Aspect-Oriented Programming) 같은 기술과 결합하여 다양한 기능 구현 가능.
4. Lombok
- 보일러 플레이트 코드를 줄여주는 라이브러리.
- 자동으로 보일러 플레이트 코드를 생성 → 코드의 가독성과 유지보수성을 높여줌.
- 어노테이션 기반으로 동작.
- 컴파일 시점에 소스 코드를 변환하여 필요한 메서드를 자동으로 생성.
❓보일러 플레이트 코드(Boilerplate code)란?
- getter/setter 메서드, 생성자, toString 메서드 등과 같이 반복적으로 작성되는 코드.
1. 주요 Lombok Annotation
- @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;
}
**/
}
- @ToString
- 객체의 toString() 메서드를 자동으로 생성.
- 기본적으로 클래스의 모든 필드를 포함하며, 특정 필드를 제외하거나 포맷 지정 가능.
- toString() 메서드는 객체를 String으로 변환해주는 역할을 수행.
@ToString
public class User {
private String name;
private int age;
}
- @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");
}
}
반응형
'스파르타 내일배움캠프 > TIL(Today I learned)' 카테고리의 다른 글
25.04.03 TIL - MVC 패턴(1) (2) | 2025.04.03 |
---|---|
25.04.02 TIL - Spring Framework, Spring Boot, Gradle (2) | 2025.04.02 |
25.03.31 TIL - Web Application(2) (2) | 2025.03.31 |
25.03.28 TIL - Web Application(1) (3) | 2025.03.28 |
25.03.27 TIL - HTTP(3) (2) | 2025.03.27 |