Skills/Java

Java - static import

aoaa 2022. 8. 29. 23:48

  Static import는 JDK5에 추가된 기능으로 일반 import와 달리 메서드나 변수를 패키지와 클래스명없이 접근가능하게 해줍니다. 이는 코드를 훨씬 간결하게 하고, 사용하기 편하다는 장점을 가져옵니다. 

 오라클 공식문서를 보면 상수의 로컬 복사본을 선언하거나 상속을 abuse(남용?)할 때 static import를 사용하라고 나와있습니다.


1. 사용

 기본적으로 import문 뒤에 static을 붙이고, {package.class.*} or {package.class.member}를 적으면 됩니다. 

import static java.lang.Math.*;

int i = abs(-20);
double d = acos(PI) * E;

  이 때, 와일드 카드를 사용한 전체 멤버 import는 권장되지 않고, 특정 멤버필드나 메서드만을 import 하는 방식이 권장되고 있습니다.

import static java.lang.Math.abs;
import static java.lang.Math.acos;
import static java.lang.Math.PI;
import static java.lang.Math.E;
    
...
    
int i = abs(-20);
double d = acos(PI) * E;

 


2. Junit 에서 사용

 보통 테스트코드를 작성할 때, Junit의 assert 메서드를 많이 사용하게 되는데 이 때 static import를 사용해 코드 가독성을 높일 수 있습니다. 

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

{
	...
    
    @Test
    void join(){
        Member member = new Member(1L, "memberA", Grade.VIP);

        memberService.join(member);
        Member findmember = memberService.findMember(1L);
		
        // import 전 Assertions.assertThat(member).isEqualTo(findmember);
        // import 후
        assertThat(member).isEqualTo(findmember);
    }
}

 

 위의 경우는 간결한 테스트여서 어렵진 않지만, test 코드의 길이가 길어지고 가독성이 떨어진다면 static import를 통해 Test코드의 의도를 명확하게 한다면 좋은 코드가 될 것입니다. 

 

 참고로 인텔리제이에서는 Assertions.assertThat()까지 작성한 뒤, option + enter(맥)을 누르면 static method를 import할 수 있습니다. 

 

 

 

 

 

 

 

참조

 

 

 

 

'Skills > Java' 카테고리의 다른 글

Java - 바이트 코드  (0) 2022.09.20
Java - JVM & Garbage Collector  (0) 2022.09.16
Java - 추상 클래스와 인터페이스  (0) 2022.08.23
Java - ConcurrentHashMap  (0) 2022.08.21
Java - Generic, 변성  (0) 2022.08.13