JAVA 소소한 꿀팁

2021. 12. 23. 19:10JAVA

Java 소소한 꿀팁

  • 공부 또는 일을 진행하다가 알게되는 소소한 문법, 꿀팁 같은 것 들을 적어놓는 페이지 입니다. 다른 분들도 댓글로 남겨주시면 여러 사람들이 볼 수 있을거 같아 좋을거 같습니다!

[JAVA 문법]

가변 매개변수, 가변인자

  • 일단 가변 매개변수, 가변인자를 보기전에 오버로딩의 조건을 보자!

    1. 메소드 이름이 같아야하고

    2. 매개변수의 개수 또는 타입이 달라야 한다.

자바는 매개변수의 개수와 타입이 달라도 같은 이름의 메소드명으로 동일 기능을 구현 Ok

  • 매개변수의 타입이 달라도 하나의 메소드명으로 오버로딩 할 수 있고 매개변수의 개수가 달라도 역시 오버로딩이 가능하다.

그렇다면 매개변수의 갯수의 의해 오버로딩이 가능하다면 매개변수가 무한적으로 늘어나게 되면 매개변수를 다 적어줘야할 까?

  • Ex)

    String test(String t1, String t2)
    String test(String t1, String t2, String t3)
    String test(String t1, String t2, String t3, String t4)

    이런식으로 매개변수가 늘어나면 일일히 다 적어줘야할까?

  • 정답부터 말하면 NO!! JDK1.5부터 매개변수의 개수를 동적으로 지정해 줄 수 있게 되었는데 이 기능을 가변인자 라고 한다.

가변인자가 없었던 시절 ( 저는 사실 모릅니다.. JDK1.5이전에는 사용하질 않아서... 🤫)

void sum(Vector<String> v) {
        for(Object a: v)
            System.out.println(a);
        }

void sum(String [] str) {
        for(String a:str)
            System.out.println(a);
    }
public static void main(String args[]) {
        Varargs v = new Varargs();
        Vector<String> ve = new Vector<String>();
        ve.add("a");
        ve.add("b");
        v.sum(ve);
        }
public static void main(String args[]) {
        Varargs v = new Varargs();
        String [] s = {"a", "b", "c"};
        v.sum(s);
        }

가변인자 사용 ( JDK 1.5 이후 🙋🏻)

...키워드를 사용한다.

void sum(String...str) {
        for(String a:str)
            System.out.println(a);
}
public static void main(String args[]) {
    Varargs v = new Varargs();
    v.sum("a","b","c");
    v.sum();
    v.sum(new String [2]);
}
  • 특이점은 가변인자는 내부적으로 배열을 생성해서 사용한다! (향상된 for문 str, 인자값으로 배열 넣는다.) 그래서 가변인자를 너무 난발하면 성능에 문제가 생길 수 있다고하니 난발하지말자..!

주의점

  1. 가변인자 외에도 다른 매개변수가 더 있다면 가변인자는 마지막에 선언...! 해야한다.

    void sum(String s, String...str) {
            for(String a:str)
                System.out.print(a+s);
    }
  2. 가변인자로 메소드 오버로딩은 금지!

    void sum(String s, String...str) {
            for(String a:str)
                System.out.print(a+s);
        }
        void sum(String...str) {
            for(String a:str)
                System.out.print(a);
        }

    이 메서드를 실행을 하게 되면 컴파일러는 어떤 메서드를 사용해야할 지 구분을 하지 못한다.

  3. 가변인자를 사용하면 인자를 넣지 않아도 정상적으로 실행이 되기때문에 가변인자의 길이를 가지고 Exception을 호출해야한다.

[Set All Values of ArrayList to False]

  • Boolean[] flags = new Boolean[10] 를 생성하면 자동으로 false가 들어가는걸로 알고 있는데 List를 만들때 자동으로 들어가게끔 하고 싶었다.
    • ex) List list = new ArrayList<>(); → 10개인 배열을 선언하고 그 10개 배열을 다 True or False로 세팅을 해주고 싶었다.

해결방법

List<Boolean> list = new ArrayList<Boolean>(Arrays.asList(new Boolean[10]));
Collection.fill(list, Boolean.TRUE);

참고자료

Stack OverFlow

JPQL에서 NULL값 다른값으로 대체하기

  • 실무에서는 아니.. 실무뿐 아니라 개발을 할 때 NULL값을 DB에 저장하고 쓸 때가 많은데 이때 JPQL을 사용하면서 SELECT 에서 NULL값을 다른 값을 처리했던 경험을 작성하려고한다.
  • SQL에서는 IFNULL(컬럼, 바꾸고싶은 타입 or 값(?))을 사용하는게 있어서 아.. 그러면 JPQL에서는 뭐가 없을까 하다가 찾아 낸게 있다.
    COALESCE() 라는 키워드이다.

사용법

  • COALESCE(orm.onsiteCancel, false )
    • 현재 orm.onsiteCancel이 NULL인데 false로 값을 바꿔서 SELECT하라는 의미이다.

참고자료

바로가기