본문 바로가기

자바17

Interface Interface(인터페이스) 인터페이스란? 인터페이스 작성 방법 디폴트 메소드와 static 메소드 인터페이스 구현 인터페이스의 본질(의존성 분리) 1. 인터페이스란? 인터페이스는 자바의 추상 클래스의 일부이다. 인터페이스는 추상 클래스(abstract)와 비슷하지만 차이점이 있다. 인터페이스는 abstract와는 달리 몸통을 가진 메소드와 멤버 변수를 가질 수 없다. 이런 인터페이스는 간단하게 말해서 설계도로 설명할 수 있다. 또한 인터페이스는 메소드의 몸통이 없이 선언부만 가지고 있기 때문에 혼자서는 기능을 할 수 없다. 인터페이스가 기능을 가지기 위해서는 이 인터페이스를 구현한 구현체가 필요한다. 구현체는 인터페이스의 모든 메소드를 구현해야 한다. 2. 인터페이스 작성 방법 인터페이스작성 방법은 .. 2020. 9. 21.
Generic 제너릭(Generic) 자바 1.5부터 제너릭이 추가 되었다. 이 제너릭이란 기능은 현재 안쓰는 곳이 없고, 제너릭을 모르면 자바 공식 문서조차 읽을 수 없을 정도로 자바의 핵심적인 기능이다. 우선 제너릭이 사용되는 기본적인 상황을 먼저 보자 일단 제너릭을 바로 사용하기전에 제너릭을 사용하지 않을때 생기는 문제점을 보자. public interface Manager { String toString(); } public class Book implements Manager { public String toString(){ return "책"; } } public class Apple implements Manager { public String toString(){ return "사과"; } } publi.. 2020. 7. 21.
Stream Stream 자바에서 데이터를 저장하기 위해 배열, 리스트, 맵 등 다양한 방식을 사용한다. 그런데 이런 데이터들을 이용하기 위해 for문, iterator을 사용할때 코드가 굉장히 길어지거나 가독성이 떨어지는 경우가 있다. 이런 문제를 해결할 수 있는 것이 스트림이다. 스트림은 기본적으로 데이터를 담고있는 자료형(배열,리스트..)을 사용할때 자주 사용할 법한 메소드들을 가지고 있다. 우선 예를 들어보자 우리가 배열안의 요소들을 출력하는 방식이다. int[] arr = {1,2,3,4,5}; for(Integer i:arr){ System.out.println(i); } 이런 간단하면서도 아주 많이 쓰이는 상황을 메소드로 만들어 아래처럼 사용할 수 있다. public void printArr(int[] .. 2020. 7. 15.
lambda2 Uitl 패키지의 함수형 인터페이스 람다식에 대해 이어서 적어보자 우선 앞에서 람다식을 사용하기 위해서 함수형 인터페이스를 사용해야 한다는 것을 알았다. 하지만 여기서 한가지 불만이 있다. 함수는 앞서 설명한대로 4가지의 유형이 있는데 사실 이런 유형이 매개변수가 있는 경우에서 매개변수의 갯수에 차이가 있을뿐 유형은 그대로이다. 이런 상황에서 4가지 유형의 함수형 인터페이스를 람다식을 위해 매번 만드는 것은 좀 번거로운 일이다. 그래서 자바 1.8의 Util패키지에 미리 4가지 경우의 함수형 인터페이스를 만들어 두었다. 종류 매개변수 반환 Runnable X X Consumer O X Supplier X O Function O O 위의 4사지의 사용을 바로한번 보자 Runnable runnable = (.. 2020. 7. 10.
Lambda 람다 표현식 자바 8부터 람다 표현식이 추가 되었다. 람다표현식의 등작으로 자바에서도 함수형 프로그래밍이 가능해졌는데 이것은 자바의 큰 변화이다. 우선 람다의 기본적인 개념부터 설명해보자 자바에서의 람다는 기본적으로 익명 클래스와 동급으로 취급되는 객체처럼 사용이 된든것이다. 그렇기 때문에 변수에 대입을 하듯이 사용이 가능하고 매개변수의 인자로 전달 또한 되면서 기본의 자바의 체계에 무리를 안준다. 그렇다면 기초적인 사용법을 보자 우선 아래의 코드는 자바에서의 기본적인 메소드이다. int foo(int num){ return num; } 위의 메소드를 람다로 표현 하면 아래와 같다. (int num) -> {return num;} 보다싶이 차이점은 반환타입, 메소드명이 없다는 것이다. 그리고 메소드의 형.. 2020. 7. 9.