프레임워크(Framework)
소프트웨어 개발을 간편하게 만들기 위한 소프트웨어 개발 환경이다.
- 장점
- 개발 프로젝트에 일관된 구조를 제공하여 코드의 일관성과 가독성을 높여주며 팀 협업이 편해진다.
- 기본적으로 필요한 기능과 도구를 제공하여 개발자들이 핵심 비즈니스 로직에 집중할 수 있다.
- 보안 관련 기능을 기본적으로 제공하여, 보안 취약점을 방지하는 데 도움을 준다.
- 통합된 테스트 환경과 도구를 제공하여 테스트를 쉽게 작성하고 실행할 수 있다.
- 인기 있는 프레임워크는 방대한 커뮤니티 지원을 받으며, 다양한 문서를 활용할 수 있다.
- 단점
- 프레임워크는 굉장히 복잡한 구조를 가지기 때문에, 처음 익히는 데 시간이 많이 소요된다.
- 프레임워크의 새로운 버전이 기존 코드와 호환되지 않을 수 있다.
- 정해진 규칙과 구조를 따르게 강제하여 자유롭게 변경하기 어려울 수 있다.
라이브러리(Library)
애플리케이션 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음을 의미한다.
- 장점
- 개발자가 복잡한 코드를 직접 작성하지 않아서 개발 생산성이 높아진다.
- 검증된 라이브러리는 테스트와 커뮤니티 지원을 통해 안정성과 품질이 보장된다.
- 단점
- 라이브러리가 업데이트 되거나 지원이 중단될 경우 문제가 발생할 수 있다.
- 버전 호환성 문제로 인해 다른 라이브러리나 기존 코드와 충돌이 발생할 수 있습니다.
- 불필요한 기능을 포함한 라이브러리를 사용하면 비효율적이다.
- 라이브러리의 내부 구현을 직접 수정하기 어려워, 특정 요구 사항에 맞게 조정하기 힘들 수 있다.
정리
- 프레임워크
- 애플리케이션을 개발할 때 전체적인 구조(frame)를 잡기 위해 사용하는 것
- 기본적으로 프레임워크 내에서 사용하는 라이브러리들이 존재한다.
- 라이브러리
- 개발을 진행하는 과정에서 필요한 기능을 구현하기 위해 사용하는 것
어노테이션(Annotation)
코드에 메타데이터를 추가할 수 있는 기능을 제공하며 주로 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용된다.
- 어노테이션 정의
- 어노테이션은
@ 기호로 시작하며, 클래스, 메서드, 변수, 매개변수, 패키지 등에 추가할 수 있다.
- 내장 어노테이션
@Override
- 메서드가 상위 클래스나 인터페이스의 메서드를 오버라이드하고 있음을 나타낸다.
- 이때 컴파일러는 메서드가 실제로 오버라이드하고 있는지 확인한다.
@Deprecated
- 해당 요소가 더 이상 사용되지 않음을 나타낸다.
- 해당 어노테이션이 붙은 코드를 사용하면 컴파일 경고가 발생한다.
@SuppressWarnings
- 컴파일러 경고를 억제한다.
- 사용되지 않는 변수에 대한 경고를 무시할 수 있다.
- 사용자 정의 어노테이션
- 개발자가 필요에 따라 직접 어노테이션을 정의할 수 있다.
- 사용자 정의 어노테이션은 특정 메타데이터를 추가하거나,
- AOP(Aspect-Oriented Programming) 같은 기술과 결합하여 다양한 기능을 구현할 수 있다.
럼북(Lombok)
보일러 플레이트 코드를 줄여주는 라이브러리로 자동으로 보일러 플레이트 코드를 생성하여 코드의 가독성과 유지보수성을 높여준다. Lombok은 어노테이션 기반으로 동작하며, 주로 컴파일 시점에 소스 코드를 변환하여 필요한 메서드를 자동으로 생성한다.
보일러 플레이트 코드(Boilerplate code)란?
getter/setter 메서드, 생성자, toString 메서드 등과 같이 반복적으로 작성되는 코드를 뜻한다.
- 주요 Lombok Annotation
@Getter, @Setter :
클래스의 모든 필드에 대한 getter와 setter 메서드를 자동으로 생성한다.
@ToString :
객체의 toString() 메서드를 자동으로 생성한다.
기본적으로 클래스의 모든 필드를 포함하며, 특정 필드를 제외하거나 포맷을 지정할 수도 있다.
@EqualsAndHashCode :
equals()와 hashCode() 메서드를 자동으로 생성한다.
객체의 동일성과 해시 코드를 정의하는데 사용된다.
@NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor :
기본 생성자를 생성한다.
모든 필드를 매개변수로 하는 생성자를 생성한다.
필수(final) 필드만을 매개변수로 하는 생성자를 자동으로 생성한다.
@Data :
@Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 를 한꺼번에 적용하는 어노테이션이다.
주로 테스트 용도로 사용한다.
@Builder :
빌더 패턴을 적용해 객체를 생성할 수 있게 합니다. 복잡한 객체 생성에 유용하며, 필드 이름을 명시적으로 지정하면서 객체를 생성할 수 있다.
@Slf4j :
클래스에 로그를 남기기 위한 Logger 객체를 자동으로 생성한다.
Spring Boot
빌드 관리 도구
build.gradle