자바7에서 추가된 Objects 클래스는 여러 유틸메서드를 제공하고있다. 이중 유용한 메서드들을 몇가지 알아보자. 1. equals()null에 대한 방어를 위해 이런코드를 작성한적이 한번쯤 있을것이다. public void method(String str1, String str2){ if(str1 != null && str1.equals(str2)){ } } str2는 인자로 활용되기때문에 null 체크를 굳이 할필요가 없지만 메서드 호출 객체인 str1이 null 이면 NPE가 발생하기때문에 이런식으로 방어코드를 작성하게된다. 이런 코드는 실무에서도 흔히 볼 수 있는데 null 체크는 자칫하면 빼먹기 쉬워 골칫덩이가 되곤한다. Optional로 우아하게 처리하는 방법도 있지만 str1과 str2가 모..
보통 JDK에 기본적으로 내장된 클래스는 완전 무결할 것이라고 믿고 쓰는 경우가 많다. 설령 그 라이브러리에서 문제가 발생하더라도 그건 그걸 잘못활용한 내 잘못이지 JDK내부의 라이브러리가 잘못됐다고 생각하는 경우는 거의 없다. 물론 JDK내의 클래스들은 뛰어난 개발자들이 만든것이니 그럴(완벽할) 확률이 매우 높지만 어쨋든 그 클래스들도 개발자들이 만든지라 문제가 있는 경우도 존재한다. 자바의 날짜 관련 클래스는 그 역사가 참 깊은데 그것들을 모두 묻고 자바8에 다시 새로운 날짜클래스가 추가되었다. 기존에 잘 쓰고있는 클래스들이 있었는데 새로나오게된 이유가 뭔지부터 간단하게 살펴보고 신규 클래스에 대해 알아보자. 1. Date자바에서 가장 역사가 깊은 날짜 클래스다. 객체를 생성하는데 2017년 3월 1..
자바8을 처음 접했을때 느꼈던 점은 자바8의 꽃은 스트림이라는 것이었다. 그러나 내 맘을 가장 매혹시키고, 언젠가 자바8을 쓸날이 오면 이것만큼은 꼭 잘 쓰고싶다고 생각했던것은 오늘 포스팅할 Optional이었다. 1. null자바는 좀 더 쉽게 프로그래밍하자는 취지에서 개발됐다. OSMU(One Source Multi Use)를 위해 하나의 코드로 OS에 상관없이 돌아갈수 있게 개발됐고, C계열을 처음 공부할때 지옥이라 불리는 포인터를 모두 감췄다. 그러나 단 하나 감추지 못한 포인터가 있는데 그것이 null포인터다.자바 프로그래밍에서 NullPointerException은 언제 터질지 모르는 에러의 근원이었고 이를 방지하기위해 대부분의 메서드 앞줄에선 중복적인 방어코드가 들어가는 문제가 있었다. pu..
개인적으로 자바8의 꽃이라 생각하는 스트림 포스팅이다. 내용이 워낙 방대하긴하나 쉽게 생각하면 스트림은 결국 API들의 모임이기때문에 외워야할게 많기도하다. 1. 스트림(Stream)스트림은 자바8에 추가된 API로 자바의 자료구조들을 선언적으로 다루는 역할을 한다. 앞선 함수형 인터페이스 포스팅에서 설명했던 인터페이스들이 엄청나게 등장을 하니 스트림을 다룬다면 외우기 싫어도 외워질수밖에 없을 것이다.자료구조들을 다루는 역할을 하기때문에 스트림은 배열이나 List처럼 생성한 다음 요소를 추가하는 형태가 아니다. 정적 팩토리 메서드(Static Factory Method)를 이용해 자료구조로부터 생성한다.int[] numberArr = {1, 2, 3, 4, 5, 6}; List numberList = A..
앞선 포스팅에서 메서드를 전달하기 위한 익명 클래스를 작성하는 반복되고 지저분한 코드를 줄이는게 람다 표현식이라고 설명했다. 메서드 레퍼런스는 이름에서 알 수 있듯이 메서드의 레퍼런스를 전달한다는 의미이며, 람다표현식에서 메서드 호출 1회로 코드가 끝나는 경우 메서드 레퍼런스를 이용해 이미 줄인 코드를 더 줄일수도있다.메서드의 레퍼런스라고하지만 엄밀히 말해 자바에서의 메서드는 일급 객체가 아니기때문에 객체의 레퍼런스를 전달하는 방식으로 작동한다. Function f = str -> Integer.parseInt(str);Function 인터페이스는 하나의 인자를 받아 다른타입의 리턴타입을 갖는 apply() 메서드를 갖고있는 함수형 인터페이스이다. 람다를 사용해 String 객체를 인자로 받아 Integ..
앞선 포스팅에서 함수형 인터페이스(Functional Interface)가 무엇인지 알아봤다. 이번 포스팅에서는 Java8에서 기본적으로 제공하는 함수형 인터페이스들을 알아보자. 보통 'API는 외울필요없다. 이런게 있다는것만 알고있으면 된다.' 이런말을 많이 하는데 개인적인 생각에 Java8에서 제공하는 API는 최대한 외울수 있는데까지는 외워야 한다고 생각한다. 다음번에 알아볼 Stream은 선언형 프로그래밍으로 API만 계속 등장하게되는데 그때마다 찾아서 쓰려면 오히려 생산성이 저하되는 일이 발생할 수도 있기때문이다. 1) Runnable기존부터 존재하던 인터페이스로 스레드를 생성할때 주로사용하였으며 가장 기본적인 함수형 인터페이스다. void 타입의 인자없는 메서드를 갖고있다.Runnable r ..
Java8에서 뭐가 추가됐나요? 라고 물으면 가장 먼저 들리는 대답은 십중팔구 '람다와 스트림이요' 일것이다. 당연히 맞는 말이고 틀린 답은 아니지만 람다와 스트림이 왜 추가됐는지를 알아야하는데, 자바가 기존에 없던 문법까지 만들어가면서 이런것들을 추가한건 함수형 프로그래밍을 받아들이기 위해서다. 그래서 Java8을 공부하고자하는 사람이라면 그냥 단순히 '이번에 추가된 람다랑 스트림공부해야지'가 아니라 함수형 프로그래밍을 공부해야한다. 이는 프로그래밍 자체의 패러다임이 변하기때문에 그저 추가된 문법, 추가된 API만 공부하면 되는 수준이 아니라 프로그래밍 방식 자체, 문제 해결을 위한 사고방식 자체를 기존에서 탈피해야함을 의미한다. 해보니 기존에도 못하던걸 새로운걸 받아들이려고하니까 너무 어렵다;; 그래..
함수형 인터페이스(Functional Interface)추상메서드를 1개만 갖고있는 인터페이스 동작 파라미터(Behavior Parameter)값이 아닌 행위를 매개변수로 전달함, 메서드를 전달한다고 생각하면 됨, template callback 패턴을 생각하면 된다. 메서드와 함수의 차이(Method, Function)메서드는 클래스에 종속되어있음. 즉 파라미터를 받지않는 함수는 사실상 항상 같은 값이 반환되어야하지만 메서드의 경우 클래스에 종속적이기때문에 파라미터를 받지않음에도 항상 반환값이 다를 수 있음(인스턴스 변수, this를 이용하는 경우). 즉 this를 이용하지못하는 정적 메서드(static method)는 함수라고 할만함. 메서드 레퍼런스(Method Reference)객체의 레퍼런스를 ..
- Total
- Today
- Yesterday
- javascript
- EffectiveJava
- JavaScript Core
- http
- Spring
- DesignPattern
- go-core
- MySQL
- code
- TEST
- JPA
- Jackson
- frontcode
- java8
- db
- servlet
- mariadb
- Design Pattern
- backend개발환경
- generics
- OOP
- Kotlin
- 정규표현식
- toby
- Git
- programming
- java
- frontend개발환경
- clean code
- spring cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |