자바 8이 나온지 언 5년 정도가 지났다. 지금은 자바 12버전까지 나와있으니(현재 19년 8월 5일) 현재 업무로 사용하는 메이저 버전은 자바 6이다. 물론 7도 있고, 일부 8도 있긴 하지만 메이저 사용 버전은 6이다.
아마도 조만간 메이저 버전이 업데이트 될거다. 차세대 시스템을 하게 될테니 말이다. ( 뭐, 그게 아니더라도 ... ) 사실 자바 버전업에 대해서 무관심했다. 큰 변화가 아니라고 생각했고, 사용할 때가 되어서 익히면 된다라는 생각이 있으니까. 대충 맞는 생각이라 본다. 미리 익히는 기술은 어차피 깊이가 낮고 poc 수준 이상이 될수도 없을 뿐더러 시간이 지나면 완전히 잊혀질 가능성이 높기에...
내용에 대한 설명보다는 느낀 후기에 대해서 정리해본다.
일반 책의 대부분의 내용에서는 기존 레거시 코드를 자바 8의 람다나 스트림을 이용하면 이렇게 보기 좋은 모던한 스타일의 짧은 코드로 짤수 있다고 강조하고 있지만 보면서 눈쌀을 찌푸렸다. 코드가 짧다고 무조건 좋은건가? 라고 생각해봤을 때 기존 레거시 코드가 좀 더 객관적이고, 표준적인 방법이라고 생각한다. 기존 레거시의 방법은 어떤 언어든 통용되는 표준적인 문법으로 구성되어있다.
난 몇라인 길다고 해서 그것이 비 생산적이거나 비효율적이라고 생각하지 않는다. 개발자의 코딩이 몇라인을 줄인다고 혹은 늘어난다고 일이 줄거나 늘거나 할 정도의 시대는 이미 지났다고 생각한다. 진짜 코딩량때문에 괴로운 개발자가 있을까? 그런 현장이라면 이미 자바는 어울리지 않는것이 아닐까?
생각나는대로 정리해본다.
1) 람다를 보며 1. 좋다고 생각했던 부분은 동적 파라미터화, 2. 중간에 익명클래스를 람다화 시켜야 된다는 책의 내용에는 별 공감을 할수가 없었다. → 변경해서 좋은점이 있나? → 3. 특히 람다화하는것이 단순히 코드의 디자인이 변경되는 것이 아니라 바이트 코드 자체가 다른 코드로 변경된다. ( 점점 더 별로 )
2) 스트림을 보며 좋다고 생각했던 부분은 병렬처리. 나머진 진짜 별로.
3) optional 클래스 → null 처리는 공통화된 클레스로 처리하지만, 직접적으로 포인터를 다루지 않는 자바에서 null 포인터를 다룬다는 책의 지적에 공감했다. 향후 8을 쓰게 된다면 optional 클래스는 적극 활용해보겠단 생각이 듬.
4) 인터페이스 디폴트 메소드 → 인터페이스를 사용하면서 있었으면 했던 기능이다. 이 역시 향후 8을 도입하는 시스템에서는 적극 활용해야겠다.
5) 스트림은 레거시코드에 비해 성능 문제가 발생할 수 있고, 디버깅이 어렵다. ( 병렬처리 제외 ) → 이게 좀 많이 별로.
6) 람다를 이용한 패턴 처리 ( 그치만 기존에도 잘 썼던 패턴들인걸... 람다짜응.... )
- 전략패턴(스트래티지)
- 템플릿메소드
- 옵저버 패턴
- 의무체인패턴( andThan )
- 팩토리 패턴( Supplier )
7) 또, 람다
- 시그니처 외워야되나? ( ㅡ.ㅡ; 난 게으르다. )
- 익명클래스하고 this가 다르다고?
- 은닉변수를 못쓰다니...
아직도 레거시 주요 시스템은 자바 6이고, 사이드 시스템에 7, 8이 섞여있지만 이런 패턴을 이용한 코드를 사용할 일은 없었다. 조만간 계정계 시스템을 재 구축하면 자바 8 이상으로 갈 거기도 하고, 어떤 좋은게 있는지 궁금해서 찾아봤다. 책을 보다가 사용하지도 않는데 깊게 볼 필요가 없다고 생각해서 간략히 보고 나서 느낀 점을 기록해둔다.
'dev > java' 카테고리의 다른 글
FileNotFoundException 에러 해결 방법 (3) | 2019.08.22 |
---|---|
indexOutofBoundException 에러 해결 방법 (0) | 2019.08.20 |
ClassNotFoundException 에러 해결 방법(java.lang.ClassNotFoundException) (0) | 2019.08.18 |
java.lang.NoClassDefFoundError 에러 해결 방법 (1) | 2019.08.16 |
자바 최대공약수와 최소공배수 구하기 (0) | 2019.06.15 |
릿코드(LeetCode) - Add Two Numbers (0) | 2019.04.13 |
자바 NullPointerException 에러 원인과 예방(일명 널포인터) (0) | 2018.09.05 |
InetAddress ip 주소 가져오기 (0) | 2017.12.03 |