티스토리 뷰

SW개발/Java

자바의 숨겨진 기능

개소왕 2018. 12. 18. 10:39

* 개요

새로 생겼거나, 숨겨져 있었거나, 아니면 다들 아는데 나만 몰랐거나 하는 기능들.


- 다음 링크들을 주로 정리한 것이다

http://whiteship.tistory.com/1925?category=56999

https://stackoverflow.com/questions/15496/hidden-features-of-java


- 다 정리하려 했는데 너무 많아서 흐지부지...



* 이중 괄호 초기화

List 선언 후 항상


lst.add(1);

lst.add(2); 


이렇게 선언하던걸 다음과 같이 선언 가능


lst = new ArrayList<Integer>() 

{{ add(1); add(2); }};



- 이게 되는건 사실 생성자 이외에 이런 초기화가 가능하기 때문...

https://stackoverflow.com/a/47493



- Arrays.asList() 이용한 방법


lst = Arrays.asList(1,2);





* 제네릭의 상위 타입 제한


다음과 같이 MyList 의 제네릭을 List 와 Set 으로 제한하면


MyList<ArrayList> 나 MyList<HashSet> 은 불가능하며


class MyList<T extends List & Set> 



아래와 같이 둘다 상속한 경우는 이용 가능하다

interface ListSet extends List, Set {

...

}



public static <A, B extends Collection<A> & Comparable<B>>

boolean foo(B b1, B b2, A a) {

   return (b1.compareTo(b2) == 0) || b1.contains(a) || b2.contains(a);

}


다음과 같이 foo() 란 메서드를 선언하며 파라메터로 들어올 b1, b2, a 에 대해 정의할 수도 있다.





* instanceof 는 Null 검사할 필요 없어

if( null != aObject && aObject instanceof String )


사실 null != aObject && 은 지워도 정상작동함





* forEach (자바 8 이상)


for(a  : intList) { ... }


다음과 같이 표현 가능 (자바 8 이상)


intList.forEach(a -> System.out.println(a));




* 가변인수 (자바 5 이상)

http://gyrfalcon.tistory.com/entry/Java-Varargs?category=535624


method(new Integer() {1,2,3}) 대신

method(1,2,3) 가능




* Enum의 초기화

enum의 각 요소에 생성자 이용하여 Int 값을 지정 가능

https://stackoverflow.com/a/52914





* 맵 생성을 다음과 같이 가능

Map m = Collections.<String,Integer>emptyMap();




* Enum의 요소를 Interface로 선언하고, 각 요소별로 메서드를 따로 오버라이드 가능





* 익명 subclass 가능

https://stackoverflow.com/a/1025199




*Unsafe 

http://rangken.github.io/blog/2015/sun.misc.unSafe/

http://www.docjar.com/html/api/ClassLib/Common/sun/misc/Unsafe.java.html


sun.misc.Unsafe 클래스는 메모리 접근 등 위험한 메서드들을 모아놓은 클래스이다.


생성자 호출 없이 객체 생성하거나, 메모리 직접 접근하거나 등

성능향상 가능하지만 위험한 기능들을 묶어놓고 있다.


- 제거 계획도 있는듯..

https://diveintodata.org/2015/07/15/removal-of-unsafe-in-java9/





* 스트링을 여러줄에 걸쳐 사용 (자바의 기능 아님)

http://gyrfalcon.tistory.com/entry/Java%EC%97%90%EC%84%9C-Multi-String-%EC%84%A0%EC%96%B8-%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-Multiline?category=535624



여러줄에 걸쳐 String 쓸때 "..." + "..." + ... 반복해야 했는데

이를 @Multiline 이란 어노테이션 이용해서 해결하는 라이브러리에 대한 설명.






-- 편집

http://blog.daum.net/dogcowking/166






'SW개발 > Java' 카테고리의 다른 글

[종합] Collection / 컬렉션 검색, 정렬, 복사, 추가, 삭제 등  (0) 2018.12.18
Reflection 리플렉션  (0) 2018.12.18
맵 정렬 - TreeMap  (0) 2018.11.30
정리하다만/static  (0) 2018.11.19
사용자 정의 Annotation  (0) 2018.11.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함