JAVA 소소한 꿀팁
2021. 12. 23. 19:10ㆍJAVA
Java 소소한 꿀팁
- 공부 또는 일을 진행하다가 알게되는 소소한 문법, 꿀팁 같은 것 들을 적어놓는 페이지 입니다. 다른 분들도 댓글로 남겨주시면 여러 사람들이 볼 수 있을거 같아 좋을거 같습니다!
[JAVA 문법]
가변 매개변수, 가변인자
일단 가변 매개변수, 가변인자를 보기전에 오버로딩의 조건을 보자!
메소드 이름이 같아야하고
매개변수의 개수 또는 타입이 달라야 한다.
자바는 매개변수의 개수와 타입이 달라도 같은 이름의 메소드명으로 동일 기능을 구현 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, 인자값으로 배열 넣는다.) 그래서 가변인자를 너무 난발하면 성능에 문제가 생길 수 있다고하니 난발하지말자..!
주의점
가변인자 외에도 다른 매개변수가 더 있다면 가변인자는 마지막에 선언...! 해야한다.
void sum(String s, String...str) { for(String a:str) System.out.print(a+s); }
가변인자로 메소드 오버로딩은 금지!
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); }
이 메서드를 실행을 하게 되면 컴파일러는 어떤 메서드를 사용해야할 지 구분을 하지 못한다.
가변인자를 사용하면 인자를 넣지 않아도 정상적으로 실행이 되기때문에 가변인자의 길이를 가지고 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로 세팅을 해주고 싶었다.
- ex) List
해결방법
List<Boolean> list = new ArrayList<Boolean>(Arrays.asList(new Boolean[10]));
Collection.fill(list, Boolean.TRUE);
참고자료
JPQL에서 NULL값 다른값으로 대체하기
- 실무에서는 아니.. 실무뿐 아니라 개발을 할 때 NULL값을 DB에 저장하고 쓸 때가 많은데 이때 JPQL을 사용하면서
SELECT
에서 NULL값을 다른 값을 처리했던 경험을 작성하려고한다. - SQL에서는 IFNULL(컬럼, 바꾸고싶은 타입 or 값(?))을 사용하는게 있어서 아.. 그러면 JPQL에서는 뭐가 없을까 하다가 찾아 낸게 있다.
COALESCE()
라는 키워드이다.
사용법
COALESCE(orm.onsiteCancel, false )
- 현재 orm.onsiteCancel이 NULL인데 false로 값을 바꿔서 SELECT하라는 의미이다.
참고자료
'JAVA' 카테고리의 다른 글
날짜 메서드 세련되게 작성해보자! (0) | 2022.05.15 |
---|---|
팩토리메서드를 활용한 List → DTO (0) | 2021.07.29 |
자바 리플렉션[Reflection] 이란?? (0) | 2021.07.14 |