본문 바로가기
스파르타 내일배움캠프/TIL(Today I learned)

25.04.01 TIL - 프레임워크, 라이브러리, Annotation, Lombok

by pandastic 2025. 4. 1.
반응형

 

 

목차

 

 

1. 프레임워크

    - 소프트웨어 개발을 간편하게 만들기 위한 소프트웨어 개발 환경.

    - Frame(틀) work(일하다)의 합성어 → 일하기 위한 틀.

 

  • 장점
    • 개발 프로젝트에 일관된 구조 제공 → 코드의 일관성과 가독성을 높여줌. 팀 협업이 편해짐.
    • 기본적으로 필요한 기능과 도구 제공 → 개발자들이 핵심 비즈니스 로직 집중 가능.
    • 보안 관련 기능을 기본적으로 제공 → 보안 취약점을 방지하는 데 도움.
    • 통합된 테스트 환경과 도구를 제공하여 테스트를 쉽게 작성하고 실행 가능.
    • 인기 있는 프레임워크는 방대한 커뮤니티 지원을 받고, 다양한 문서 활용 가능.
  • 단점
    • 프레임워크는 굉장히 복잡한 구조를 가지기 때문에, 처음 익히는 데 시간이 많이 소요됨.
    • 프레임워크의 새로운 버전이 기존 코드와 호환되지 않을 수 있음.
    • 정해진 규칙과 구조를 따르게 강제하여 자유롭게 변경하기 어려움.

 

2. 라이브러리

    - 애플리케이션 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음.

    - 개발자가 소프트웨어를 만들 때 필요에 따라 원하는 기능을 구현하기 위해 가져다 쓸 수 있는 일종의 도구 역할을 수행.

 

  • 장점
    • 개발자가 복잡한 코드를 직접 작성하지 않아서 개발 생산성이 높아짐.
    • 검증된 라이브러리는 테스트와 커뮤니티 지원을 통해 안정성과 품질이 보장됨.
  • 단점
    • 라이브러리가 업데이트 되거나 지원이 중단될 경우 문제가 발생할 수 있음.
    • 버전 호환성 문제로 인해 다른 라이브러리나 기존 코드와 충돌이 발생할 수 있음.
      • 생각보다 빈번하게 발생함.
    • 불필요한 기능을 포함한 라이브러리를 사용하면 비효율적.
    • 라이브러리의 내부 구현을 직접 수정하기 어려워, 특정 요구 사항에 맞게 조정하기 힘들 수 있음.

 

3. Annotation

    - 코드에 메타데이터를 추가할 수 있는 기능을 제공.

    - 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용.

    - 특정 코드를 사용하는 프로그램에게 정보를 전달하는 것.

 

  • 어노테이션 정의
    • 어노테이션은 @ 기호로 시작하며, 클래스, 메서드, 변수, 매개변수, 패키지 등에 추가 가능.
  • 내장 어노테이션
    • @Override
      • 메서드가 상위 클래스나 인터페이스의 메서드를 오버라이드 하고 있음.
        • 이때 컴파일러는 메서드가 실제로 오버라이드하고 있는지 확인.
    • @Deprecated
      • 해당 요소가 더 이상 사용되지 않음을 나타냄.
      • 해당 어노테이션이 붙은 코드를 사용하면 컴파일 경고 발생.
    • @SupressWarnings
      • 컴파일러 경고 억제.
        • 사용되지 않는 변수에 대한 경고 무시 가능.
  • 사용자 정의 어노테이션
    • 개발자가 필요에 따라 직접 어노테이션을 정의할 수 있음.
    • 사용자 정의 어노테이션은 특정 메타데이터를 추가하거나 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");
    }
}
반응형