본문 바로가기
JAVA

static import

by 글발 2024. 1. 8.
728x90
반응형

소개

자바에서 static import는 특정 클래스의 정적 멤버(메소드 또는 필드)를

클래스 이름을 사용하지 않고 직접 참조할 수 있게 해주는 기능입니다.

이는 코드의 가독성을 향상시키고,

특히 테스트 코드에서 사용될 때 테스트 케이스를 더 간결하게 작성할 수 있습니다.

이 글에서는 static import의 개념을 소개하고,

JUnit에서 자주 사용되는 assertThat과 어떻게 함께 활용할 수 있는지에 대해 살펴보겠습니다.

static import 소개

static import는 자바 5부터 도입된 기능으로,

특정 클래스의 정적 멤버 (메소드 또는 필드)를 클래스 이름을 생략하고 직접 참조할 수 있게 해줍니다.

굳이 필요할까 생각도 들지만

이는 보통 테스트 코드에서 자주 사용되며, 주로 assertThat과 함께 활용됩니다.

먼저 테스트 코드가 아닌 코드를 예시로 보겠습니다.

// static import를 사용한 예시
import static java.lang.Math.PI;
import static java.lang.Math.pow;

public class Circle {

    double calculateArea(double radius) {
        return PI * pow(radius, 2);
    }
}

위의 예시에서 import static java.lang.Math.PI;import static java.lang.Math.pow;

각각 Math 클래스의 PI 상수와 pow 메서드를 현재 클래스에 임포트하겠다는 것을 의미합니다.

따라서 Math.PI와 Math.pow를 PI와 pow로만 사용할 수 있게 됩니다.

참고로 import static java.lang.Math.*; 이렇게 한번에 import 할 수도 있지만 권장하지 않는 경우도 있습니다.

(불필요한 멤버가 import 되어 가독성 감소나 네임스페이스 충돌 등)

또한 클래스 내에 동일한 이름의 메서드가 있으면

클래스 자신의 메서드가 우선합니다.

JUnit에서의 assertThat과 static import 활용

assertThat은 assertj의 Assertion 라이브러리 중 하나로,

테스트 케이스에서 예상 값과 실제 값을 비교할 때 사용됩니다.

assertThat을 더 편리하게 사용하기 위해 static import를 활용할 수 있습니다.

기존의 코드를 보겠습니다.

// 기존의 assertThat 사용
import org.assertj.core.api.Assertions;

public class CalculatorTest {
    
    @Test
    public void testAddition() {
        Calculator calculator = new Calculator();
        int result = calculator.add(2, 3);
        Assertions.assertThat(result).isEqualTo(5);
    }
}

위 코드는 static import를 사용하지 않았습니다.

이 경우 CalculatorTest 클래스 내에서 assertThat메서드를 사용할 때마다

Assertions 클래스와 함께 호출해야합니다.

번거롭지 않은가요?

static import를 사용하면 assertThat만 호출하면 됩니다.

예시입니다.(Assertions  )

// static import를 활용한 assertThat 사용
import static org.assertj.core.api.Assertions.*;

public class CalculatorTest {
    
    @Test
    public void testAddition() {
        Calculator calculator = new Calculator();
        int result = calculator.add(2, 3);
        assertThat(result)isEqualTo(5);
    }
}

위 코드처럼 static import를 사용하면 CalculatorTest 클래스 내에서

assertThat을 클래스 이름(Assertions)을 사용하지 않고 직접 참조할 수 있어 코드 작성이 한결 편해집니다.

또한, 코드의 가독성이 향상되고, 테스트 코드를 더 간결하게 작성할 수 있습니다.

static import 사용법

IDE마다 import 하는 방법이 조금 다릅니다.

인텔리제이 기준으로 설명하자면 간단합니다.

사진을 보면서 설명하겠습니다.

Assertions에서 Alt+Enter 눌러주시면 위 처럼 화면이 나오는데

밑에 있는 Add로 시작하는 것을 선택해주시면 끝입니다.

간단하죠?

이클립스에서는 Code Assist 동작인 Ctrl+Space를 누르면 자동으로 static import를 인식하지 않습니다.

이클립스에서는 static 멤버에 대한 Code Assist를 지원하기 위해 사용할 클래스를 Favorites에 등록하여야 합니다.

저는 이클립스가 없기 때문에 한번 검색을 해보니 바로 나오네요.

어렵지 않고 금방할 수 있으니 적용해보면 좋을거 같습니다.

주의사항

  1. static import를 지나치게 남발하면 코드의 가독성이 떨어질 수 있으므로 신중하게 사용해야 합니다.
  2. 클래스 내에 동일한 이름의 메서드가 있으면 클래스 자신의 메서드가 우선합니다.

마무리

static import를 적절히 사용하면 코드의 가독성을 향상시키고,

JUnit과 같은 테스트 라이브러리와 함께 사용하면 테스트 코드를 간결하게 작성할 수 있습니다.

그러나 지나치게 남발하면 코드의 가독성이 떨어질 수 있으므로, 사용 시에는 신중하게 판단해야 합니다.

위의 예시에서처럼 static import를 통해 테스트 코드를 간결하게 작성하는 방법을 익히면

효율적인 코드 작성에 도움이 될 것입니다.

 

<김영한 선생님의 스프링 핵심원리 기본편 예제 및 설명이 들어갔습니다.>

'JAVA' 카테고리의 다른 글

문자열 유효성 검증 StringUtils.hasText(String)  (0) 2024.09.07
Optional  (0) 2023.09.17