1. Generic Type Intersection제네릭은 Bounded Type Parameter, Bounded Wildcard를 이용해 제네릭에 들어오는 타입을 제한할 수 있다. public class Test { public static void main(String args[]) { method01(new ArrayList()); method02(new ArrayList()); } //Bounded Type Parameter public static void method01(List list) { } //Bounded Wildcard public static void method02(List
1. Genericsjava5에서 부터 추가된 제네릭은 타입을 파라미터로 만들어 넘어오는 파라미터에 따라 다른 타입이 되게끔한다. 이로서 얻을 수 있는 이득은 타입이 동적으로 변하게 되기때문에 개발자가 직접 타입체크를 하고 타입 캐스팅을 하는 코드가 없어지게되어 정적인 타입 안전성을 확보할 수 있다. public class Test { public static void main(String[] arg) { MyOptional stringOptional1 = MyOptional.ofNullable("hello"); MyOptional stringOptional2 = MyOptional.ofNullable(123); } } class MyOptional { T t; private MyOptional(T t)..
토비의 스프링으로 유명한 토비님의 방송을 보고 정리를 시작한다. 1. Dispatch1. (특히 특별한 목적을 위해) 보내다 2. (편지・소포・메시지를) 보내다 3. 신속히 해...네이버 검색결과이다. 자바는 객체지향 프로그래밍언어로서 객체들간의 메세지 전송을 기반으로 문제를 해결하게된다. 메세지 전송이라는 표현은 결국 메서드를 호출하는것인데 그것을 dispatch라고 부르는 것이다.dispatch는 static dispatch와 dynamic dispatch가 있는데 static은 구현클래스를 이용해 컴파일타임에서부터 어떤 메서드가 호출될지 정해져있는것이고, dynamic은 인터페이스를 이용해 참조함으로서 호출되는 메서드가 동적으로 정해지는걸 말한다. public class Test { public s..
자바8을 처음 접했을때 느꼈던 점은 자바8의 꽃은 스트림이라는 것이었다. 그러나 내 맘을 가장 매혹시키고, 언젠가 자바8을 쓸날이 오면 이것만큼은 꼭 잘 쓰고싶다고 생각했던것은 오늘 포스팅할 Optional이었다. 1. null자바는 좀 더 쉽게 프로그래밍하자는 취지에서 개발됐다. OSMU(One Source Multi Use)를 위해 하나의 코드로 OS에 상관없이 돌아갈수 있게 개발됐고, C계열을 처음 공부할때 지옥이라 불리는 포인터를 모두 감췄다. 그러나 단 하나 감추지 못한 포인터가 있는데 그것이 null포인터다.자바 프로그래밍에서 NullPointerException은 언제 터질지 모르는 에러의 근원이었고 이를 방지하기위해 대부분의 메서드 앞줄에선 중복적인 방어코드가 들어가는 문제가 있었다. pu..
Java5 에서부터 for-each 문이 추가됐다. 특별히 새로운 문법이 추가된게 아니라 기존 for문을 활용하는거라 for-each라고하면 못알아듣는 사람도 있고, 향상된 for문이라고 말하는사람도 있고.. 특히 요즘엔 stream API에 forEach() 메서드까지 추가되면서 의사소통에 약간 혼란스럼이 있긴하지만 보면 다들 알것이다. List list = Arrays.asList(1, 2, 3, 4, 5); for(Integer i : list){ System.out.println(i); } for-each 문은 인덱스를 명시할 필요없이 알아서 리스트 사이즈만큼 반복되기때문에 에러여지도 없어지고 코드도 간결해지는 매우 유용한 문법이지만 한가지 치명적인 문제점이 있다. 그것은 인덱스를 사용할 수 없다..
개인적으로 자바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
- OOP
- 정규표현식
- go-core
- Git
- Spring
- Kotlin
- mariadb
- MySQL
- javascript
- JavaScript Core
- code
- generics
- programming
- java
- db
- clean code
- frontend개발환경
- TEST
- backend개발환경
- DesignPattern
- EffectiveJava
- Jackson
- java8
- http
- Design Pattern
- servlet
- spring cloud
- toby
- frontcode
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |