ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] static import에 대하여 ( +IntelliJ에서 사용하기)
    프로그래밍 언어/JAVA 2022. 9. 29. 19:07

     

    📑 static이란?

     

    자바 클래스의 static 메서드는 클래스에 대한 인스턴스의 생성 없이 메서드를 사용할 수 있다. 그럼 static은 언제 붙이는 걸까?? 아래 4가지 개념이 있다. 

     

     

    1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.

    : 생성된 각 인스턴스는 서로 독립적이기 때문에 각 인스턴스 변수(iv)는 서로 다른 값을 유지한다. 그러나 모든 인스턴스에서 같은 값이 유지되어야 하는 변수는 static을 붙여 클래스 변수로 정의해야 한다. 

     

    2. 클래스 변수(static 변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.

    : static이 붙은 변수(클래스 변수)는 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되기 때문이다. 

     

    3. 클래스 메서드(static)는 인스턴스 변수를 사용할 수 없다.

    : 인스턴스변수는 인스턴스가 반드시 존재해야만 사용할 수 있는데, 클래스메서드(static 이 붙은 메서드)는 인스턴스 생성 없이 호출 가능하므로 클래스 메서드가 호출되었을 때 인스턴스가 존재하지 않을 수 있다. 그래서 클래스 메서드에서 인스턴스변수의 사용을 금지한다. 

     

    4. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.

    : 메서드 호출시간이 짧아지므로 성능이 향상된다. 

     

     

     

    📑 static import

     

    예를 들어 절대값을 구하는 java.lang.Math 클래스의 abs() 메서드는 아래와 같이 클래스명.메서드로 사용한다.

    int i = Math.abs(-3);

     

    JDK 1.5부터는 이런 정적(static) 메서드를 더욱 쉽게 사용하기 위해 static import를 지원한다.

     

    import static java.lang.Math.abs;
    int i = abs(-3);

     

    정적 메서드 import static을 사용해서 import한 후에 클래스명 없이 abs(); 처럼 바로 사용할 수 있다. 

    만약 클래스 내 모든 정적 메서드를 import 하려면 아래와 같이 사용이 가능하다.

     

    import static java.lang.Math.*;

     

    하지만 일반적으로 import 에 * 을 사용하는 것은 권장 되지 않다. why? 가독성이 떨어질 뿐더라 네임스페이스 오염의 문제가 발생할 수도 있기 때문이다.

     

    😃따라서 static import는 정말 자주 사용하는 클래스, 이름만 봐도 어디에 속할 수 있는 정적 멤버를 사용하는데만 쓰도록 한다. 

     


     

    📑 IntelliJ static import 받기

     

    @Test
    @DisplayName("VIP는 10%할인이 적용되어야 한다.")
    void vip_o(){
        //given
        Member member = new Member(1L, "memberVIP", Grade.VIP);
        //when
        int discount = rateDiscountPolicy.discount(member, 20000);
        //then
        assertThat(discount).isEqualTo(2000);
    }

     

    JUNIT5를 이용해 테스트 코드를 작성한 메서드이다. 만약 static import를 받지 않았더라면 아래와 같이 작성해야 되지만, 보통 Assertions는 static import를 받아 생략해서 작성한다. 

     

    Assertions.assertThat(discount).isEqualTo(2000);

     

     

    윈도우 기준 alt + enter를 눌렀을 때 다음과 같이 add on-demand static import for ~~~ 이런 문구가 나타나야 되는데 나타나질 않는 것이다,,, 직접 improt 부분 수정하려고 해도 자동 import 설정해두니까 쉽지 않고,, 또 기능 껐다 키는 방법 말구 다른 좋은 방법이 있을텐데 알아보다 해답을 찾았다.!!

     

     

     

     

    💚 바로 settings에 static import 검색 후 add on-demand static import 기능을 켜주면 되는 것! 덕분에 앞으로 편리하게 사용할 수 있겠다. 

     

     

    반응형

    댓글

Designed by Tistory.